Lie*_*oen 4 c# reflection enums
我需要创建一个没有0值的Enum类的实例.使用0值,下一个代码可以正常工作:
ObjectFactory.CreateInstance("Edu3.DTOModel.Schedule.ScheduleStateEnum");
Run Code Online (Sandbox Code Playgroud)
枚举:
namespace Edu3.DTOModel.Schedule
{
public enum ScheduleStateEnum
{
DUMMY = 0,
Draft = 1,
Published = 2,
Archived = 3
}
}
Run Code Online (Sandbox Code Playgroud)
如果我注释掉DUMMY,则创建实例将不再起作用.
我需要创建一个没有0值的Enum类的实例.
假设这样的枚举:
public enum ScheduleStateEnum
{
Draft = 1,
Published = 2,
Archived = 3
}
Run Code Online (Sandbox Code Playgroud)
你可以创建一个像这样的实例:
ScheduleStateEnum myState = 0;
Run Code Online (Sandbox Code Playgroud)
如果您无法声明类型的变量,并且需要以字符串形式访问该类型(如示例所示),请使用Activator.CreateInstance:
var myState = Activator.CreateInstance(Type.GetType(
"Edu3.DTOModel.Schedule.ScheduleStateEnum"));
Run Code Online (Sandbox Code Playgroud)
当然,这两个选项都会为你提供一个实际具有整数值的实例0,即使枚举没有声明一个.如果您希望它默认为您实际声明的值之一,则需要使用Reflection来查找它,例如:
var myState = Type.GetType("Edu3.DTOModel.Schedule.ScheduleStateEnum")
.GetFields(BindingFlags.Static | BindingFlags.Public)
.First()
.GetValue(null);
Run Code Online (Sandbox Code Playgroud)
对于没有定义任何值的枚举,这将崩溃.使用FirstOrDefault并检查null是否要阻止此操作.
这是ObjectFactory类的问题,因为
Activator.CreateInstance(typeof(Edu3.DTOModel.Schedule.ScheduleStateEnum))
工作正常并创建int 0.