0

我正在尝试编写一个通用方法,该方法可以采用任何 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

4 回答 4

2

您主要使用示例 2 - 您应该能够做到这一点:

public static int ToInt(this Enum value)
{
    return Convert.ToInt32(value);
}
于 2012-10-31T21:31:23.753 回答
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"));

但我个人更喜欢第一个选项

于 2012-10-31T21:34:45.013 回答
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());
    }
}
于 2012-10-31T21:41:37.903 回答
0

简单明了,只需使用

public static int ToInt(this Enum value)
{
    return Convert.ToInt32(value);
}
于 2012-10-31T21:42:14.567 回答