我使用一个示例C#控制台应用程序来显示我遇到的错误:
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");
}
}
我得到的输出是这样的:
object fired
enum fired
object fired
object fired
object fired
enum fired
enum fired
object fired
object fired
为什么传入0时会触发enum方法?
最佳答案
C#语言规范的1.10节介绍了0的特殊情况。
这种隐式转换导致重载解决方案选择object
一个枚举重载。
关于c#-3.0 - 枚举方法应在对象应触发时触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2103133/