我有一个接受枚举类型(基类)作为参数的函数:
public void SomeFunction(Enum e);
然而我无法将其转换为整数。我可以获取枚举值的名称,但无法获取其整数表示。
我真的不关心枚举类型,我只需要整数值。
我应该传递一个整数吗?还是我在这里做错了什么?
我有一个接受枚举类型(基类)作为参数的函数:
public void SomeFunction(Enum e);
然而我无法将其转换为整数。我可以获取枚举值的名称,但无法获取其整数表示。
我真的不关心枚举类型,我只需要整数值。
我应该传递一个整数吗?还是我在这里做错了什么?
int i = Convert.ToInt32(e);
这将适用于枚举的底层存储方式,而其他解决方案如果枚举存储在除了int32之外的任何地方(比如byte或short),就会抛出InvalidCastException异常。Enum
实际上不是枚举类型...有点混淆。它是一个枚举类型的装箱副本;但是,以下内容应该可以正常工作:
int i = (int)(object)e;
(这个 (object)
转换并不会 添加 一个盒子,因为它已经被包装了)
同时注意,并非所有的枚举都基于 int
;对于非 int
枚举,这种拆箱技巧可能会失败。
Int32 intValue = (Int32)Enum.Parse(e.GetType(), e.ToString());
(int)e
,这会得到“无法将类型'System.Enum'转换为'int'”的错误。 - Marc Gravell