为什么枚举参数不能在重载方法中接受int值(> 0)

时间:2019-05-22 10:49:04

标签: c# enums

这是我的代码:

public class Program
{
    public enum SexEnum{
        Male,
        Female
    }

    public static void Test(SexEnum s){
        Console.WriteLine("enum...");
    }


    public  static void Test(Object s){
        Console.WriteLine("object...");
    }

    public static void Main(string[] args)
    {
        Test(0);
        Test(1);
    }
}

但是实际结果是:

enum...  
object...

为什么在重载方法中enum参数不能接受int值(> 0)?

1 个答案:

答案 0 :(得分:7)

这在语言规范的第6.1.3节“隐式枚举转换(强调我的意思)”中明确规定:

  

隐式枚举转换允许使用十进制-整数-文字   0可以转换为任何枚举类型和任何可空类型,   基础类型是枚举类型。在后一种情况下,转换为   通过转换为基础枚举类型并包装   结果

因此只能将文字0隐式转换为任何枚举,而不是1,不是2,只有0

这可以通过消除占用Object的重载来进一步证明,Test(1)将变得无法编译。

关于为什么以这种方式设计语言,您必须询问语言设计师。