当对象应该被触发时枚举的方法

Chr*_*ris 2 c#-3.0

我是一个示例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时枚举方法会触发?

Jar*_*Par 8

特殊情况0包含在C#语言规范的1.10节中.

为了使枚举类型的默认值易于使用,文字0隐式转换为任何枚举类型

这种隐式转换导致重载解析,以选择一个上的enum重载object.

  • @Chris - 不需要测试值,因为在编译时根据变量的类型选择方法重载,而不是值.这个问题应该只显示一个文字零,可以转换为适当的类型. (2认同)