ANDU
ANDU

Reputation: 55

Get object type from enum value

I have an enum defined which stores multiple class names. Is there a way I can get the the type of an object given the enum value? The method GetObjectType when called with parameter Types.A should return the type of class A, how should it's body look like?

    public class A
    {

    }

    public class B
    {

    }

    public enum Types
    {
        A = 1,
        B = 2
    }

    public Type GetObjectType(Types type)
    {
         
    }

Upvotes: 1

Views: 1676

Answers (1)

NineBerry
NineBerry

Reputation: 28499

One simple approach is to use an explicit switch statement.

public Type GetObjectType(Types type)
{
    switch (type)
    {
        case Types.A:
            return typeof(A);
        case Types.B:
            return typeof(B);
    }

    throw new InvalidEnumArgumentException(nameof(type), (int)type, typeof(Types));
}

You just mustn't forget to add to the switch statement when a new enum value is added.


Another approach would be to get the type based on the name of the enum directly.

public Type GetObjectType(Types type)
{
    // Check valid enum
    if (!Enum.IsDefined(typeof(Types), type))
    {
        throw new InvalidEnumArgumentException(nameof(type), (int)type, typeof(Types));
    }

    // Build class name from Enum name. Use your correct namespace here
    string className = "WindowsFormsApp1." + Enum.GetName(typeof(Types), type);

    // Get type from class name
    return Type.GetType(className, throwOnError: true);
}

Upvotes: 1

Related Questions