224 votes

Comment définir enum sur null

J'ai un enum

string name;

public enum Color
{
  Red,
  Green,
  Yellow
}

Comment mettre à NULL en charge.

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

Modifié: My bad, je n'ai pas l'expliquer correctement. Mais toutes les réponses liées à nullable est parfait. Ma situation est Que si, j'ai get/set pour les enum dans une classe avec d'autres éléments comme le nom, etc. Au chargement de la page je initiallize la classe et essayer de 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, utilisez les suggestions ci-dessous, j'ai changé le code ci-dessus pour le faire fonctionner avec des méthodes get et set. J'ai juste besoin d'ajouter un "?" dans EnumTest classe pendant que la déclaration de privé enum variable, et en get/set méthode:

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 les belles suggestions.

429voto

Rodney Foley Points 3016

Si vous parlez c #, vous pouvez utiliser le "?" oeprator pour un type nullable. Vous devriez au moins fournir des balises pour la langue, sinon mentionnez-le également dans la question.

 public Color? myColor = null;
 

Ou utilisez La pratique standard pour les énumérations qui ne peuvent pas être null en ayant la valeur FIRST dans la énumération (autrement dit 0) comme valeur par défaut. Par exemple, dans le cas d'une couleur Aucune.

 public Color myColor = Color.None;
 

55voto

Tim Robinson Points 28696

S'il s'agit de C #, cela ne fonctionnera pas: les énumérations sont des types 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 d'utiliser Nullable :

 Color? color = null;
 

26voto

Cj S. Points 782

Rendez votre variable nullable. Comme:

 Color? color = null;
 

ou

 Nullable<Color> color = null;
 

14voto

Christopher Pfohl Points 4179

Un enum est une "valeur" type en C# (signifie l'enum est stockée en tant que quelle que soit la valeur qu'elle est, pas comme une référence à une collection de valeurs). Vous ne pouvez pas définir des types de valeur à null (depuis null est utilisé pour les types référence uniquement).

Cela étant dit, vous pouvez utiliser le construit en Nullable<T> de la classe qui encapsule des types de valeur tels que vous pouvez les mettre à null, vérifier si elle HasValue et obtenir son effectif Value. (Ceux sont les deux méthodes sur l' Nullable<T> objets.

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>;

3voto

Rokujolady Points 471

Je suis en supposant que c++ ici. Si vous êtes à l'aide de c#, la réponse est probablement le même, mais la syntaxe est un peu différente. L'enum est un ensemble de valeurs int. Ce n'est pas un objet, de sorte que vous ne devriez pas être null. Mettre quelque chose à la valeur null signifie que vous êtes à pointer un pointeur vers un objet à l'adresse zéro. Vous ne pouvez pas vraiment faire cela avec un int. Ce que vous voulez faire avec un int est de la régler à une valeur que vous ne serait pas normalement à de sorte que vous pouvez tél. si c'est une bonne valeur ou pas. Donc, donnez de la couleur à votre -1

Color color = -1;

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

Donc,

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X