Come impostare enum su null

Ho un enume

string name; public enum Color { Red, Green, Yellow } 

Come impostarlo su NULL al caricamento.

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

Modificato: il mio male, non l’ho spiegato correttamente. Ma tutte le risposte relative a nullable sono perfette. La mia situazione è What if, I’ve get / set per l’enum in una class con altri elementi come nome, ecc. Al caricamento della pagina, inizializzo la class e provo a predefinire i valori su null. Ecco lo scenario (il codice è in 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; //??? } } } 

Quindi utilizzando i suggerimenti di seguito ho modificato il codice precedente per farlo funzionare con i metodi get e set. Devo solo aggiungere “?” nella class EnumTest durante la dichiarazione della variabile enum privata e nel metodo 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; } } } 

Grazie a tutti per i preziosi suggerimenti.

Puoi utilizzare il “?” operatore per un tipo nullable.

 public Color? myColor = null; 

Oppure usa la pratica standard per le enumerazioni che non possono essere nulle avendo il valore FIRST nell’enum (aka 0) come valore predefinito. Ad esempio in un caso di colore Nessuno.

 public Color myColor = Color.None; 

Se questo è C #, non funzionerà: le enumerazioni sono tipi di valore e non possono essere null .

Le opzioni normali consistono nell’aggiungere un membro None :

 public enum Color { None, Red, Green, Yellow } Color color = Color.None; 

… o usare Nullable :

 Color? color = null; 

Rendi la tua variabile nullable. Piace:

 Color? color = null; 

o

 Nullable color = null; 

Un enum è un tipo di “valore” in C # (significa che l’enum è memorizzato come qualunque valore esso sia, non come riferimento a un luogo in memoria in cui è memorizzato il valore stesso). Non è ansible impostare i tipi di valore su null (poiché null viene utilizzato solo per i tipi di riferimento).

Detto questo, è ansible utilizzare la class Nullable HasValue che HasValue tipi di valore tali che è ansible impostarli su null, verificare se HasValue e ottenere il Value effettivo. (Questi sono entrambi i metodi sugli oggetti Nullable .

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

C’è anche una scorciatoia che puoi usare:

 Color? color = null; 

È lo stesso di Nullable ;

Sto assumendo c ++ qui. Se stai usando c #, la risposta è probabilmente la stessa, ma la syntax sarà leggermente diversa. L’enum è un insieme di valori int. Non è un object, quindi non dovresti impostarlo su null. Impostare qualcosa su null significa che stai puntando un puntatore a un object per indirizzare lo zero. Non puoi davvero farlo con un int. Quello che vuoi fare con un int è impostarlo su un valore che normalmente non avresti, in modo che tu possa comunicare se è un buon valore oppure no. Quindi, imposta il tuo colore su -1

 Color color = -1; 

Oppure, puoi iniziare il tuo enum a 1 e impostarlo a zero. Se si imposta il colore su zero come è adesso, lo si imposterà su “rosso” perché il rosso è zero nel tuo enum.

Così,

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