从枚举值获取对象类型
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);
}
我定义了一个存储多个 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);
}