如何从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 )是不可能的。 请注意,这也是“危险的”,因为枚举可以有不同的基础类型( intlongbyte ...)。

更正式地说: System.EnumInt32没有直接的继承关系(虽然都是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

上一篇: How to convert from System.Enum to base integer?

下一篇: display int value from enum