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 也是一个整数,并且溢出了一个整数)
我有一个从 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 也是一个整数,并且溢出了一个整数)