如何编写一个将枚举作为泛型并返回int值的方法

时间:2012-10-31 21:26:11

标签: c# .net enums

我正在尝试编写一个泛型方法,它可以采用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));
}

有什么想法吗?

4 个答案:

答案 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);
}