首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法将类型“System.Enum”转换为int

无法将类型“System.Enum”转换为int
EN

Stack Overflow用户
提问于 2009-10-29 21:03:29
回答 7查看 34.4K关注 0票数 33

(好的,我在这里暴露我的无知之深,请温文点)

背景

我有一个方法,看起来(有点)像这样:

代码语言:javascript
复制
public void AddLink(Enum enumVal)
{
     string identifier = m_EnumInterpreter(enumVal);
     AddLink(identifier);
}

EnumInterpreter是一个在创建父类时传入的Func。

我之所以使用Enum,是因为在这个级别上,它“不关我的事”--我不关心它是哪个特定的enum。调用代码只使用(生成的)枚举来避免魔术字符串。

问题

如果EnumInterpreter返回一个空字符串,我希望抛出一个实际值为enumVal的异常。我以为我只能强制转换为int,但是编译器不会有它。我做错了什么?(请不要说“一切”)。

EN

回答 7

Stack Overflow用户

发布于 2009-10-29 21:14:05

System.Enum不能直接转换为Integer,但它确实显式实现了IConvertible,这意味着您可以使用以下代码:

代码语言:javascript
复制
public void AddLink(Enum enumVal)
{
    string identifier = m_EnumInterpreter(Convert.ToInt32(enumVal));
    AddLink(identifier);
}

请记住,如果您的Enum实际上使用的不是Integer (例如浮点数),那么您将在转换时丢失非整数数据。或者明显地将转换调用替换为您要转换的任何内容(如果已知)

票数 53
EN

Stack Overflow用户

发布于 2009-10-29 21:06:10

不,您不能将其转换为整数,因为System.Enum不是枚举,它只是枚举的基类。

编辑:

您可以按如下方式获得值,但它很难看:

代码语言:javascript
复制
int intVar = (int)enuYourEnum.GetType().GetField("value__").GetValue(objYourEnum);
票数 7
EN

Stack Overflow用户

发布于 2010-06-02 06:56:33

试试这个..。

m_EnumInterpreter((int) (object) enumVal);

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1643571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档