views:

1813

answers:

1

I got an Int16 value, from the database, and need to convert this to an enum type. This is unfortunately done in a layer of the code that knows very little about the objects except for what it can gather through reflection.

As such, it ends up calling Convert.ChangeType which fails with an invalid cast exception.

I found what I consider a smelly workaround, like this:

String name = Enum.GetName(destinationType, value);
Object enumValue = Enum.Parse(destinationType, name, false);

Is there a better way, so that I don't have to move through this String operation?

Here's a short, but complete, program that can be used if anyone need to experiment:

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);
    }
}
+5  A: 

Enum.ToObject(.... is what you look for!

Petoj
That is exactly what I was looking for, thanks!
Lasse V. Karlsen
Legend! Didn't know about this. Isn't stackoverflow brill?! :-)
DoctaJonez
well i dont know about legend but thanks :P
Petoj