我很想知道为什么C#编译器只给我第二个if语句的错误信息.
enum Permissions : ulong
{
ViewListItems = 1L,
}
public void Method()
{
int mask = 138612833;
int compare = 32;
if (mask > 0 & (ulong)Permissions.ViewListItems > 32)
{
//Works
}
if (mask > 0 & (ulong)Permissions.ViewListItems > compare)
{
//Operator '>' cannot be applied to operands of type 'ulong' and 'int'
}
}
Run Code Online (Sandbox Code Playgroud) 今天我发现了一个非常奇怪的C#函数重载行为.当我有一个方法有2个重载,一个接受对象,另一个接受任何类型的枚举时,会出现问题.当我将0作为参数传递时,将调用该方法的Enum版本.当我使用任何其他整数值时,将调用Object版本.我知道这可以通过使用显式转换来轻松修复,但我想知道为什么编译器会以这种方式运行.这是一个错误还是我不知道的一些奇怪的语言规则?
下面的代码解释了问题(使用运行时2.0.50727检查)
感谢您对此的任何帮助,Grzegorz Kyc
class Program
{
enum Bar
{
Value1,
Value2,
Value3
}
static void Main(string[] args)
{
Foo(0);
Foo(1);
Console.ReadLine();
}
static void Foo(object a)
{
Console.WriteLine("object");
}
static void Foo(Bar a)
{
Console.WriteLine("enum");
}
}
Run Code Online (Sandbox Code Playgroud)