无法将类型'System.Enum'转换为int

Ben*_*jol 25 .net c# enums casting

(好吧,我会在这里揭露我无知的深处,请温柔)

背景

我有一个看起来像这样的方法:

public void AddLink(Enum enumVal)
{
     string identifier = m_EnumInterpreter(enumVal);
     AddLink(identifier);
}
Run Code Online (Sandbox Code Playgroud)

EnumInterpreter是一个Func <Enum,string>,它在创建父类时传入.

我正在使用Enum,因为在这个级别上它"不关我的事" - 我不关心它是哪个具体的枚举.调用代码只使用(生成的)枚举来避免魔术字符串.

如果EnumInterpreter发回一个空字符串,我想抛出一个带有enumVal实际值的异常.我以为我只能转换为int,但编译器不会拥有它.我究竟做错了什么?(请不要说'一切').

Rya*_*ner 41

System.Enum不能直接强制转换为Integer,但它确实实现了IConvertible,这意味着您可以使用以下命令:

public void AddLink(Enum enumVal)
{
    string identifier = m_EnumInterpreter(Convert.ToInt32(enumVal));
    AddLink(identifier);
}
Run Code Online (Sandbox Code Playgroud)

请记住,如果您的Enum实际上使用的是除Integer之外的其他内容(例如浮点数),则转换时将丢失非整数数据.或者显然用您要转换的内容替换转换调用(如果已知)

  • C#枚举不能漂浮:http://msdn.microsoft.com/en-us/library/sbbt4032%28VS.71%29.aspx - **每个枚举类型都有一个基本类型,其可以是任何整数类型** (7认同)

Max*_*erl 5

不,你无法将它转换为int,因为System.Enum不是枚举,它只是枚举的基类.

编辑:

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

int intVar = (int)enuYourEnum.GetType().GetField("value__").GetValue(objYourEnum);
Run Code Online (Sandbox Code Playgroud)

  • 是的,那很难看. (7认同)