我使用一个示例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/

10-11 21:11