这是我的代码:
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)?
在语言规范的第6.1.3节“隐式枚举转换(强调我的意思)”中明确规定了这一点:
隐式枚举转换允许将小数-整数-文字0转换为任何枚举类型和其基础类型为枚举类型的任何可空类型。在后一种情况下,通过转换为基础枚举类型并包装结果来评估转换
因此,只有文字0可以隐式转换为任何枚举,而1不是2,只能转换为0。
这可以通过删除占用的重载来进一步证明Object,Test(1)它将变得无法编译。
至于为什么以这种方式设计语言,则必须询问语言设计师。