从枚举值获取对象类型

Get object type from enum value

我定义了一个存储多个 class 名称的枚举。有没有办法在给定枚举值的情况下获取对象的类型?使用参数 Types.A 调用方法 GetObjectType 应该 return class A 的类型,它的主体应该是什么样子?

    public class A
    {

    }

    public class B
    {

    }

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

    public Type GetObjectType(Types type)
    {
         
    }

一种简单的方法是使用明确的 switch 语句。

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));
}

当添加新的枚举值时,您一定不要忘记添加到 switch 语句。


另一种方法是直接根据枚举的名称获取类型。

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);
}