我正在尝试编写一个泛型方法,它可以采用int类型的任何枚举,并能够将其转换为int值。例如:
public int GetIntValue(Enum enumValue) {
return (int)enumValue;
}
这是我完成此任务的一种方式,但似乎有更好的方法:
public static int ToInt(this Enum value) {
return (int) Enum.Parse(value.GetType(), Enum.GetName(value.GetType(), value));
}
有什么想法吗?
答案 0 :(得分:2)
你大部分都是用例子2 - 你应该能够做到这一点:
public static int ToInt(this Enum value)
{
return Convert.ToInt32(value);
}
答案 1 :(得分:0)
有一些选项可以将枚举转换为其基础值,这也适用于泛型:
return Convert.ToInt32(enumValue)
或
return (int)enumValue;
或
Type integralType = Enum.GetUnderlyingType (enumValue.GetType());
return Convert.ChangeType (enumValueEnum, integralType);
或首先返回字符串,然后将其转换为int?
return int.Parse(anyEnum.ToString("D"));
但我个人更喜欢第一个选项
答案 2 :(得分:0)
下面的代码片段显示了使用泛型的两种方法。
public enum MyEnum
{
Three = 3,
Seven = 7
}
public static class MyExtensions
{
public static int ToInt<T>(this T value)
{
return Convert.ToInt32(value);
}
}
[TestFixture]
public class CodeTests
{
public int GetInt<T>(T value)
{
return Convert.ToInt32(value);
}
[Test]
public void TestOne()
{
Assert.AreEqual(7, GetInt(MyEnum.Seven));
}
[Test]
public void TestTwo()
{
Assert.AreEqual(7, MyEnum.Seven.ToInt());
}
}
答案 3 :(得分:0)
简单明了,只需使用
public static int ToInt(this Enum value)
{
return Convert.ToInt32(value);
}