Я получил значение Int16
из базы данных, и мне нужно преобразовать его в тип enum. К сожалению, это делается в слое кода, который очень мало знает об объектах, за исключением того, что он может собрать посредством отражения.
Как таковой, он завершает вызов Convert.ChangeType
, который завершается ошибкой с недопустимым исключением преобразования.
Я нашел то, что я считаю вонючим обходным путем, например:
String name = Enum.GetName(destinationType, value);
Object enumValue = Enum.Parse(destinationType, name, false);
Есть ли лучший способ, чтобы мне не приходилось перемещаться по этой строковой операции?
Вот короткая, но полная программа, которую можно использовать, если кому-то нужно поэкспериментировать:
using System;
public class MyClass
{
public enum DummyEnum
{
Value0,
Value1
}
public static void Main()
{
Int16 value = 1;
Type destinationType = typeof(DummyEnum);
String name = Enum.GetName(destinationType, value);
Object enumValue = Enum.Parse(destinationType, name, false);
Console.WriteLine("" + value + " = " + enumValue);
}
}