2010-12-02 119 views
132

我有一個枚舉如何設置枚舉空

string name; 

public enum Color 
{ 
    Red, 
    Green, 
    Yellow 
} 

如何將它設置爲NULL負載。

name = ""; 
Color color = null; //error 

編輯: 我的壞,我沒有正確解釋。但所有與可爲空有關的答案都是完美的。我的情況是,如果,我已經在類中使用名稱等獲取/設置enum。在頁面加載時,我初始化類並嘗試將這些值默認爲null。下面是這種情況(代碼是在C#):

namespace Testing 
{ 
    public enum ValidColors 
    { 
     Red, 
     Green, 
     Yellow 
    } 

    public class EnumTest 
    { 
     private string name; 
     private ValidColors myColor; 

     public string Name 
     { 
      get { return name; } 
      set { name = value; } 
     } 

     public ValidColors MyColor 
     { 
      get { return myColor; } 
      set { myColor = value; } 
     } 

    } 

    public partial class _Default : System.Web.UI.Page 
    {  
     protected void Page_Load(object sender, EventArgs e) 
     { 
      EnumTest oEnumTest = new EnumTest(); 
      oEnumTest.Name = ""; 
      oEnumTest.MyColor = null; //??? 
     } 
    } 

} 

然後,使用下面的建議我改變了上面的代碼,使其與get和set方法工作。我只需要添加「?」在EnumTest類中私有枚舉變量聲明和get/set方法中:

public class EnumTest 
{ 
    private string name; 
    private ValidColors? myColor; //added "?" here in declaration and in get/set method 

    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 

    public ValidColors? MyColor 
    { 
     get { return myColor; } 
     set { myColor = value; } 
    } 

} 

感謝所有的可愛的建議。

+0

的可能的複製[C#枚舉:可爲空或 '未知' 值](http://stackoverflow.com/questions/1795657/c-sharp-enums-nullable-or-未知值) – 2016-07-26 03:50:02

回答

264

您可以使用運算符爲可空類型。

public Color? myColor = null; 

或使用枚舉的標準做法是不能在枚舉具有第一值爲空(又名0)是默認值。例如在顏色爲None的情況下。

public Color myColor = Color.None; 
+58

默認值爲+1。 – 2010-12-02 16:27:40

14

使您的變量爲空。像: 「?」

Color? color = null; 

Nullable<Color> color = null; 
4

枚舉是一個「值」類型在C#(指根據枚舉被存儲,因爲它是任何值,而不是作爲對值的集合的引用)。您不能將值類型設置爲null(因爲null僅用於引用類型)。

這就是說,你可以使用內置的Nullable<T>類包裝值類型,這樣你可以將它們設置爲null,檢查它是否HasValue並獲得其實際Value。 (這些都是在Nullable<T>對象的兩種方法

name = ""; 
Nullable<Color> color = null; //This will work. 

還有一個快捷方式,你可以使用:

Color? color = null; 

這是一樣的Nullable<Color>;

31

如果這是C#,它。將不起作用:枚舉是值類型,不能是null

正常的選項是添加一個None成員:

public enum Color 
{ 
    None, 
    Red, 
    Green, 
    Yellow 
} 

Color color = Color.None; 

...或使用Nullable

Color? color = null; 
4

我假設C++在這裏。如果你使用c#,答案可能是一樣的,但是語法會有些不同。 枚舉是一組int值。這不是一個對象,所以你不應該把它設置爲null。將某些內容設置爲空意味着您將指向指向對象的指針以指向零。你不能用int來做到這一點。你想要用int來做什麼就是將它設置爲一個你通常不會擁有的值,這樣你就可以打電話了,如果它是一個很好的值。 所以,設置你的顏色爲-1

Color color = -1; 

或者,您可以從1開始的枚舉,並將其設置爲零。如果現在將顏色設置爲零,則會將其設置爲「紅色」,因爲枚舉中的紅色爲零。

所以,

enum Color { 
red =1 
blue, 
green 
} 
//red is 1, blue is 2, green is 3 
Color mycolour = 0;