How to convert from System.Enum to base integer?

c#, enums, type-conversion

Solution

If you don't want to cast,

Convert.ToInt32()

could do the trick.

The direct cast (via `(int)enumValue`) is not possible. Note that this would also be "dangerous" since an enum can have different underlying types (`int`, `long`, `byte`...).

More formally: `System.Enum` has no direct inheritance relationship with `Int32` (though both are `ValueType`s), so the explicit cast cannot be correct within the type system

Problem

I'd like to create a generic method for converting any System.Enum derived type to its corresponding integer value, without casting and preferably without parsing a string. Eg, what I want is something like this: ``` // Trivial example, not actually what I'm doing. class Converter { int ToInteger(System.Enum anEnum) { (int)anEnum; } } ``` But this doesn't appear to work. Resharper reports that you can not cast expression of type 'System.Enum' to type 'int'. Now I've come up with this solution but I'd rather have something more efficient. ``` class Converter { int ToInteger(System.Enum anEnum) { return int.Parse(anEnum.ToString("d")); } } ``` Any suggestions?

Original source

Related problems