У меня есть перечислениеКак конвертировать Enum, который является общим параметром для другого Enum?
enum BasicEnum
{
BasicValue1,
BasicValue2
//...
}
То, что я хотел бы иметь что-то похожее на
public void Foo<TEnum>(TEnum someEnum)
where TEnum : struct, IComparable, IFormattable, IConvertible
{
switch (someEnum)
{
case BasicEnum.BasicValue1:
//...
break;
case BasicEnum.BasicValue2:
//...
break;
}
}
TEnum
Все типы содержат только значения, которые имеются в BasicEnum
.
Конечно такой код не компилируется, поэтому я попытался изменить его на это:
public void Foo<TEnum>(TEnum someEnum)
where TEnum : struct, IComparable, IFormattable, IConvertible
{
BasicEnum basicEnum = (BasicEnum)someEnum;
switch (basicEnum)
{
//...
}
}
Как и ожидалось, здесь у меня есть ошибки снова «Невозможно преобразовать тип„TEnum“в„BasicEnum“»
это не так трудно найти трюк, как
var value = Convert.ToInt32(someEnum);
var basicValue = (BasicEnum)value;
Но это решение не кажется мне по душе так много. Есть ли способ лучше?
нет, я не думаю, что есть лучший способ. Нельзя избежать броска. В лучшем случае вы можете использовать «TryParse». 'Enum.TryParse (someEnum.ToString(), out basicValue);' –
NoviceProgrammer
Кажется лучше, чем 'Convert.ToInt' – Shymep