Ich habe eine Int16
Wert aus der Datenbank und müssen diesen in einen Aufzählungstyp konvertieren. Dies geschieht leider in einer Schicht des Codes, die nur sehr wenig über die Objekte weiß, außer dem, was sie durch Reflexion sammeln kann.
Als solches endet es mit dem Aufruf Convert.ChangeType
die mit einer ungültigen Cast-Ausnahme fehlschlägt.
Ich habe eine, wie ich finde, stinkende Abhilfe gefunden, etwa so:
String name = Enum.GetName(destinationType, value);
Object enumValue = Enum.Parse(destinationType, name, false);
Gibt es einen besseren Weg, so dass ich mich nicht durch diese String-Operation bewegen muss?
Hier ist ein kurzes, aber vollständiges Programm, das für Experimente verwendet werden kann:
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);
}
}