(好的,我在这里暴露我的无知之深,请温文点)
背景
我有一个方法,看起来(有点)像这样:
public void AddLink(Enum enumVal)
{
string identifier = m_EnumInterpreter(enumVal);
AddLink(identifier);
}
EnumInterpreter是一个在创建父类时传入的Func。
我之所以使用Enum,是因为在这个级别上,它“不关我的事”--我不关心它是哪个特定的enum。调用代码只使用(生成的)枚举来避免魔术字符串。
问题
如果EnumInterpreter返回一个空字符串,我希望抛出一个实际值为enumVal的异常。我以为我只能强制转换为int,但是编译器不会有它。我做错了什么?(请不要说“一切”)。
发布于 2009-10-29 21:14:05
System.Enum不能直接转换为Integer,但它确实显式实现了IConvertible,这意味着您可以使用以下代码:
public void AddLink(Enum enumVal)
{
string identifier = m_EnumInterpreter(Convert.ToInt32(enumVal));
AddLink(identifier);
}
请记住,如果您的Enum实际上使用的不是Integer (例如浮点数),那么您将在转换时丢失非整数数据。或者明显地将转换调用替换为您要转换的任何内容(如果已知)
发布于 2009-10-29 21:06:10
不,您不能将其转换为整数,因为System.Enum不是枚举,它只是枚举的基类。
编辑:
您可以按如下方式获得值,但它很难看:
int intVar = (int)enuYourEnum.GetType().GetField("value__").GetValue(objYourEnum);
发布于 2010-06-02 06:56:33
试试这个..。
m_EnumInterpreter((int) (object) enumVal);
https://stackoverflow.com/questions/1643571
复制相似问题