簡體   English   中英

創建沒有0值的C#Enum實例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM