我需要创建一个没有0值的Enum类的实例。使用0值,下一个代码可以正常工作:
ObjectFactory.CreateInstance("Edu3.DTOModel.Schedule.ScheduleStateEnum");
枚举:
namespace Edu3.DTOModel.Schedule
{
public enum ScheduleStateEnum
{
DUMMY = 0,
Draft = 1,
Published = 2,
Archived = 3
}
}
如果我注释掉DUMMY,则创建实例不再有效。
答案 0 :(得分:6)
我需要创建一个没有0值的Enum类的实例。
假设这样的枚举:
public enum ScheduleStateEnum
{
Draft = 1,
Published = 2,
Archived = 3
}
您可以创建这样的实例:
ScheduleStateEnum myState = 0;
如果您无法声明类型的变量,并且需要以字符串形式访问该类型(如示例所示),请使用Activator.CreateInstance
:
var myState = Activator.CreateInstance(Type.GetType(
"Edu3.DTOModel.Schedule.ScheduleStateEnum"));
当然,这两个选项都会为你提供一个实际上具有整数值0
的实例,即使枚举没有声明一个。如果您希望它默认为您实际声明的值之一,则需要使用Reflection来查找它,例如:
var myState = Type.GetType("Edu3.DTOModel.Schedule.ScheduleStateEnum")
.GetFields(BindingFlags.Static | BindingFlags.Public)
.First()
.GetValue(null);
对于没有定义任何值的枚举,这将崩溃。如果您想阻止此操作,请使用FirstOrDefault
并检查null
。
答案 1 :(得分:5)
这是ObjectFactory类的问题,因为
Activator.CreateInstance(typeof(Edu3.DTOModel.Schedule.ScheduleStateEnum))
工作正常并创建int 0。
答案 2 :(得分:2)
实际上这是不可能的。枚举是一个值字段,因此必须使用0数值初始化它。
答案 3 :(得分:1)
最佳做法是提供零值枚举成员 - 有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms182149%28VS.80%29.aspx。你有什么理由不想要零价值的成员,比如无?