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

BD-*_*Joy 3 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是实际结果是:

enum...  
object...
Run Code Online (Sandbox Code Playgroud)

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

Swe*_*per 7

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

隐式枚举转换允许将小数-整数-文字0转换为任何枚举类型和其基础类型为枚举类型的任何可空类型。在后一种情况下,通过转换为基础枚举类型并包装结果来评估转换

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

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

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