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之外的其他内容(例如浮点数),则转换时将丢失非整数数据.或者显然用您要转换的内容替换转换调用(如果已知)
不,你无法将它转换为int,因为System.Enum不是枚举,它只是枚举的基类.
编辑:
您可以获得如下值,但它很难看:
int intVar = (int)enuYourEnum.GetType().GetField("value__").GetValue(objYourEnum);
Run Code Online (Sandbox Code Playgroud)