orj*_*orj 88 c# enums type-conversion
我想创建一个泛型方法,用于将任何System.Enum派生类型转换为其对应的整数值,而不进行转换,最好不解析字符串.
例如,我想要的是这样的:
// Trivial example, not actually what I'm doing.
class Converter
{
int ToInteger(System.Enum anEnum)
{
(int)anEnum;
}
}
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用.Resharper报告您无法将类型为"System.Enum"的表达式转换为"int"类型.
现在我已经提出了这个解决方案,但我宁愿提高效率.
class Converter
{
int ToInteger(System.Enum anEnum)
{
return int.Parse(anEnum.ToString("d"));
}
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?
Mar*_*ner 131
如果你不想演员,
Convert.ToInt32()
Run Code Online (Sandbox Code Playgroud)
可以做到这一点.
直接演员(通过(int)enumValue
)是不可能的.注意,这也将是"危险的",因为一个枚举可以有不同的基础类型(int
,long
,byte
...).
更正式:System.Enum
没有直接的继承关系Int32
(虽然两者都是ValueType
s),所以显式转换在类型系统中是不正确的
BFr*_*ree 38
我通过强制转换为对象然后转换为int来实现它:
public static class EnumExtensions
{
public static int ToInt(this Enum enumValue)
{
return (int)((object)enumValue);
}
}
Run Code Online (Sandbox Code Playgroud)
这很丑陋,可能不是最好的方法.我会一直搞乱它,看看我是否能想出更好的东西......
编辑:即将发布的Convert.ToInt32(enumValue)也可以,并注意到MartinStettner打败了我.
public static class EnumExtensions
{
public static int ToInt(this Enum enumValue)
{
return Convert.ToInt32(enumValue);
}
}
Run Code Online (Sandbox Code Playgroud)
测试:
int x = DayOfWeek.Friday.ToInt();
Console.WriteLine(x); // results in 5 which is int value of Friday
Run Code Online (Sandbox Code Playgroud)
编辑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));
}
Run Code Online (Sandbox Code Playgroud)
Dre*_*kes 13
如果您需要将任何枚举转换为其基础类型(并非所有枚举都支持int
),那么您可以使用:
return System.Convert.ChangeType(
enumValue,
Enum.GetUnderlyingType(enumValue.GetType()));
Run Code Online (Sandbox Code Playgroud)
Luk*_*keH 10
为什么需要使用辅助方法重新发明轮子?将enum
值转换为其基础类型是完全合法的.
它打字较少,而且在我看来更具可读性,使用...
int x = (int)DayOfWeek.Tuesday;
Run Code Online (Sandbox Code Playgroud)
......而不是......
int y = Converter.ToInteger(DayOfWeek.Tuesday);
// or
int z = DayOfWeek.Tuesday.ToInteger();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
94325 次 |
最近记录: |