I a sample C# console application to display a bug I am experiencing:
class Program
{
public enum Days { Sat = 1, Sun, Mon, Tue, Wed, Thu, Fri };
static void Main(string[] args)
{
AddWhere("a", DateTime.Now);
AddWhere("a", 0);
AddWhere("a", 2);
AddWhere("a", 3);
AddWhere("a", "4");
AddWhere("a", Days.Sun);
AddWhere("a", Days.Fri);
AddWhere("a", 1);
AddWhere("a", (int)Days.Sat);
Console.Read();
}
public static void AddWhere(string columnName, Days cd)
{
Console.WriteLine("enum fired");
}
public static void AddWhere(string columnName, object Val)
{
Console.WriteLine("object fired");
}
}
the output I get is this:
object fired
enum fired
object fired
object fired
object fired
enum fired
enum fired
object fired
object fired
Why does the enum method fire when 0 is passed in?
The special case of 0 is covered in section 1.10 of the C# language specification.
This implicit conversion is causing overload resolution to pick the enum overload over the
objectone.