Я получил значение Int16
из базы данных и должен преобразовать его в тип перечисления. Это, к сожалению, сделано в слое кода, который очень мало знает об объектах, за исключением того, что он может собрать через отражение.
Таким образом, он заканчивает вызов Convert.ChangeType
, который выходит из строя с недопустимым исключением исключения.
Я нашел то, что считаю вонючим обходным путем, например:
String name = Enum.GetName(destinationType, value);
Object enumValue = Enum.Parse(destinationType, name, false);
Есть ли лучший способ, так что мне не нужно перемещаться по этой операции String?
Здесь короткая, но полная программа, которую можно использовать, если кому-то нужно поэкспериментировать:
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);
}
}