[英]Creating an instance of an C# Enum with no 0 value
我需要創建一個沒有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值的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
,請使用FirstOrDefault
並檢查null
。
這是ObjectFactory類的問題,因為
Activator.CreateInstance(typeof(Edu3.DTOModel.Schedule.ScheduleStateEnum))
工作正常並創建int 0。
實際上這是不可能的。 枚舉是每個定義的一個值字段,因此必須使用0數值初始化它。
最佳做法是提供零值枚舉成員 - 有關詳細信息,請參閱http://msdn.microsoft.com/en-us/library/ms182149%28VS.80%29.aspx 。 你有什么理由不想要零價值的會員,如無?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.