相关疑难解决方法(0)

运算符">"不能应用于'ulong'和'int'类型

我很想知道为什么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)

.net c#

26
推荐指数
2
解决办法
7393
查看次数

使用方法重载和枚举的奇怪(可能是错误的?)C#编译器行为

今天我发现了一个非常奇怪的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)

c# compiler-construction enums compiler-errors

11
推荐指数
1
解决办法
639
查看次数

标签 统计

c# ×2

.net ×1

compiler-construction ×1

compiler-errors ×1

enums ×1