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