2010-12-02 5 views
132

J'ai un ENUMComment configurer ENUM null

string name; 

public enum Color 
{ 
    Red, 
    Green, 
    Yellow 
} 

Comment mettre à NULL en charge.

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

Modifié: Mon mauvais, je ne l'expliquer correctement. Mais toutes les réponses liées à nullable est parfaite. Ma situation est ce que si, j'ai obtenu/set pour l'enum dans une classe avec d'autres éléments comme le nom, etc. Lors du chargement de la page, j'initialiser la classe et essayer de définir par défaut les valeurs à null. Voici le scénario (le code est en 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; //??? 
     } 
    } 

} 

Ensuite, en utilisant les suggestions ci-dessous j'ai changé le code ci-dessus pour le faire fonctionner avec méthodes get et set. J'ai juste besoin d'ajouter "?" dans la classe EnumTest pendant la déclaration de la variable enum privée et dans la méthode 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; } 
    } 

} 

Merci à tous pour vos suggestions.

+0

double possible de [C# énumérations: Nullable ou 'Unknown' Valeur] (http://stackoverflow.com/questions/1795657/c-sharp-enums-nullable-or- valeur inconnue) –

Répondre

264

Vous pouvez utiliser le opérateur pour un type Nullable.

public Color? myColor = null; 

Ou utiliser la pratique standard pour les énumérations qui ne peut être nulle en ayant la première valeur dans le ENUM (aka 0) la valeur par défaut. Par exemple dans un cas de couleur Aucun.

public Color myColor = Color.None; 
+58

+1 pour la valeur par défaut. –

+0

@ quiman pas besoin de lancer puisque le type est spécifié sur la gauche, vous êtes en train de dupliquer la première partie de ma réponse qui est déjà acceptée. –

+2

cela a répondu à ma question: * Pouvez-vous ajouter '?' à enumname pour le rendre nullable? * – LuckyLikey

14

Rendre votre variable Nullable. Comme: "?"

Color? color = null; 

ou

Nullable<Color> color = null; 
4

Un enum est un type « valeur » en C# (le moyen de l'énumération est stockée en tant que valeur quel que soit il est, non pas comme une référence à un ensemble de valeurs). Vous ne pouvez pas définir les types de valeur sur null (puisque null est utilisé uniquement pour les types de référence).

Cela dit, vous pouvez utiliser le construit dans Nullable<T> classe qui enveloppe les types de valeur tels que vous pouvez les mettre à null, vérifiez si elle HasValue et obtenir sa Value réelle. (Ce sont les deux méthodes sur les objets Nullable<T>

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

Il y a aussi un raccourci que vous pouvez utiliser:

Color? color = null; 

C'est le même que Nullable<Color>;

31

Si cela est C#, il. ne fonctionnera pas: les enums sont des types de valeur et ne peuvent pas être null

Les options normales sont d'ajouter un membre None:

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

Color color = Color.None; 

... ou utiliser Nullable:

Color? color = null; 
4

Je suppose C++ ici. Si vous utilisez C#, la réponse est probablement la même, mais la syntaxe sera un peu différente. L'énumération est un ensemble de valeurs int. Ce n'est pas un objet, donc vous ne devriez pas le mettre à null. Définir quelque chose à null signifie que vous pointez un pointeur vers un objet à adresse zéro. Vous ne pouvez pas vraiment le faire avec un int. Qu'est-ce que vous voulez faire avec un int est de le définir à une valeur que vous ne l'auriez pas normalement pour que vous puissiez tél si c'est une bonne valeur ou non. Ainsi, définissez votre couleur -1

Color color = -1; 

Ou, vous pouvez commencer votre ENUM à 1 et le mettre à zéro. Si vous définissez la couleur à zéro comme il est maintenant, vous allez le mettre à "rouge" parce que le rouge est zéro dans votre énumération.

Ainsi,

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