如何将枚举类型转换为整型?

5

我有一个接受枚举类型(基类)作为参数的函数:

public void SomeFunction(Enum e);

然而我无法将其转换为整数。我可以获取枚举值的名称,但无法获取其整数表示。
我真的不关心枚举类型,我只需要整数值。 我应该传递一个整数吗?还是我在这里做错了什么?


你具体是怎么尝试进行类型转换的? - annakata
1
@annakata 我猜是(int)e,这会得到“无法将类型'System.Enum'转换为'int'”的错误。 - Marc Gravell
@annakata:抱歉,我以为我很明显。Marc 是对的。 - the_drow
3个回答

13
int i = Convert.ToInt32(e);
这将适用于枚举的底层存储方式,而其他解决方案如果枚举存储在除了int32之外的任何地方(比如byte或short),就会抛出InvalidCastException异常。

7

Enum实际上不是枚举类型...有点混淆。它是一个枚举类型的装箱副本;但是,以下内容应该可以正常工作:

int i = (int)(object)e;

(这个 (object) 转换并不会 添加 一个盒子,因为它已经被包装了)

同时注意,并非所有的枚举都基于 int;对于非 int 枚举,这种拆箱技巧可能会失败。


如果已知“Enum”的实际类型(例如Reflection.BindingFlags),则可以将其强制转换为该类型,然后将其简单地用作整数或长整数值。这对于底层类型不大于使用的类型的枚举类型有效。 - supercat

0
Int32 intValue = (Int32)Enum.Parse(e.GetType(), e.ToString());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接