正在尝试根据两个枚举之间的条件进行解析,我们该怎么做?
bool _isEnum1 = true;
public enum _Enum1
{
value,
Text,
Image
}
public enum _Enum2
{
TextArea,
Button,
Label
}
var _enum = _isEnum1 ? Enum.TryParse("value", out _Enum1 _enum) : Enum.TryParse("TextArea", out _Enum2 _enum)
我希望'_enum'保留正确的枚举类型值。这可能吗?任何其他选择也可以。
答案 0 :(得分:1)
好吧,您正在尝试在运行时动态解析类型。您要么必须拆分整个程序流
/
其中if(_isEnum1)
{
Enum1 e = (Enum1)Enum.Parse(typeof(Enum1), "value");
HandleEnum1(e);
}
else
{
Enum2 e = (Enum2)Enum.Parse(typeof(Enum2), "value");
HandleEnum2(e);
}
用HandleEnumX
进行强类型输入,以便编译器知道发生了什么,或者完全疯了而使用EnumX
dynamic
但是,这似乎太过复杂了,更多的是思想实验,而不是您应该推向生产的实际代码。您可能应该重新考虑该部分程序的设计。至少,您可能希望将枚举包装在一个类中,以允许更灵活的设计。
作为旁注-您正在使用dynamic e;
if(_isEnum1)
{
e = (Enum1)Enum.Parse(typeof(Enum1), s);
}
else
{
e = (Enum2)Enum.Parse(typeof(Enum2), s);
}
// Now e is either Enum1 or Enum2, resolved at runtime.
,但从未测试过返回的值,因此我可以自由地将它们交换为TryParse
。
答案 1 :(得分:-1)
Enum result;
if (this._isEnum1)
{
result = (_Enum1)Enum.Parse(typeof(_Enum1), "value");
}
else
{
result = (_Enum2)Enum.Parse(typeof(_Enum2), "TextArea");
}