如何从System.Enum转换为基本整数?
我想创建一个通用的方法,用于将任何System.Enum派生类型转换为相应的整型值,而无需强制转换并且最好不分析字符串。
例如,我想要的是这样的:
// Trivial example, not actually what I'm doing.
class Converter
{
int ToInteger(System.Enum anEnum)
{
(int)anEnum;
}
}
但是这似乎并不奏效。 Resharper报告说您不能将类型'System.Enum'的表达式转换为键入'int'。
现在我已经想出了这个解决方案,但我宁愿有更高效的东西。
class Converter
{
int ToInteger(System.Enum anEnum)
{
return int.Parse(anEnum.ToString("d"));
}
}
有什么建议么?
如果你不想投,
Convert.ToInt32()
可以做到这一点。
直接投射(通过(int)enumValue
)是不可能的。 请注意,这也是“危险的”,因为枚举可以有不同的基础类型( int
, long
, byte
...)。
更正式地说: System.Enum
与Int32
没有直接的继承关系(虽然都是ValueType
),所以显式类型转换在类型系统中是不正确的
我通过将其转换为对象然后转换为int来实现它:
public static class EnumExtensions
{
public static int ToInt(this Enum enumValue)
{
return (int)((object)enumValue);
}
}
这是丑陋的,可能不是最好的方式。 我会一直搞乱它,看看我能不能找到更好的东西....
编辑:刚刚发布Convert.ToInt32(enumValue)的作品,并注意到MartinStettner打败了我。
public static class EnumExtensions
{
public static int ToInt(this Enum enumValue)
{
return Convert.ToInt32(enumValue);
}
}
测试:
int x = DayOfWeek.Friday.ToInt();
Console.WriteLine(x); // results in 5 which is int value of Friday
编辑2:在评论中,有人说这只适用于C#3.0。 我只是在VS2005中测试了这个,并且它工作正常:
public static class Helpers
{
public static int ToInt(Enum enumValue)
{
return Convert.ToInt32(enumValue);
}
}
static void Main(string[] args)
{
Console.WriteLine(Helpers.ToInt(DayOfWeek.Friday));
}
为什么你需要用辅助方法重新发明轮子? 将enum
值转换为其基础类型是完全合法的。
它不那么打字,在我看来更可读,使用...
int x = (int)DayOfWeek.Tuesday;
...而不是像...
int y = Converter.ToInteger(DayOfWeek.Tuesday);
// or
int z = DayOfWeek.Tuesday.ToInteger();
链接地址: http://www.djcxy.com/p/91795.html