对于相同类型的不同值,为什么C#调用对于重载方法不同?

Fab*_*nez 12 c# enums overloading

我对c#方法重载和调用解析有一个疑问.

假设我有以下C#代码:

enum MyEnum { Value1, Value2 }

public void test() {
    method(0); // this calls method(MyEnum)
    method(1); // this calls method(object)
}

public void method(object o) {
}

public void method(MyEnum e) {
}
Run Code Online (Sandbox Code Playgroud)

请注意,我知道如何使它工作,但我想知道为什么一个int(0)值调用一个方法而另一个(1)它调用另一个方法.这听起来很尴尬,因为两个值具有相同的类型(int),但它们对于不同的方法是"链接的".

SLa*_*aks 8

Literal 0可以隐式转换为任何enum类型,这是一个更接近的匹配object.规格.

例如,请参阅这些博客 文章.

  • @Galilyou:引用C#语言规范(1.10节):*"为了使枚举类型的默认值容易获得,文字0隐式转换为任何枚举类型."* (4认同)