Ну, вы пытаетесь динамически разрешить тип во время выполнения.Вы должны либо разделить весь поток программы
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
, но никогда не проверяете возвращаемое значение, поэтому я взялсвобода обмена их на Parse
.