我是一个示例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");
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出是这样的:
object fired
enum fired
object fired
object fired
object fired
enum fired
enum fired
object fired
object fired
Run Code Online (Sandbox Code Playgroud)
为什么传入0时枚举方法会触发?
特殊情况0包含在C#语言规范的1.10节中.
为了使枚举类型的默认值易于使用,文字0隐式转换为任何枚举类型
这种隐式转换导致重载解析,以选择一个上的enum重载object.