c# 从 long 解析枚举

c# parsing Enums from long

我有一个从 long 继承的枚举,并在我的应用程序中将其用作标志。

我刚刚注意到我无法解析大于 int.MaxValue 的值,我是做错了什么还是不受支持?

例如...

using System;

public class Program
{
    public static void Main()
    {

        foreach (var option in Enum.GetValues(typeof (A))) {
            Console.WriteLine((long)option + " = " + option);
        }

        foreach (var option in Enum.GetNames(typeof(A))) {
            var name = option;
            var val = Enum.Parse(typeof(A),name);
            Console.WriteLine(option + " is " + ((long)val));
        }

    }

    public enum A : long {      
        Red = 1 << 0,
        Blue = 1 << 32,
        Green = 1 << 33
    }
}

产生:

1 = Blue
1 = Blue
2 = Green
Red is 1
Blue is 1
Green is 2

知道如何获得正确的结果吗?

这样做,您就会明白问题的原因:Console.WriteLine((int)A.Blue);。现在写 Blue = 1L << 32 并解决你的问题。 (1<<32 不是一个大数,它是 0,因为 1 和 32 都是整数,所以 1<<32 也是一个整数,并且溢出了一个整数)