web-dev-qa-db-fra.com

Comment définir enum sur null

J'ai un enum

string name;

public enum Color
{
  Red,
  Green,
  Yellow
}

Comment le définir sur NULL au chargement.

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

Edited: Mon mauvais, je ne l'ai pas expliqué correctement. Mais toutes les réponses liées à nullable sont parfaites. Ma situation est ce qui se passe si, si je dois obtenir/définir pour l'énum dans une classe avec d'autres éléments comme le nom, etc. 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; //???
        }
    }

}

Puis, en utilisant les suggestions ci-dessous, j'ai modifié le code ci-dessus pour le faire fonctionner avec les méthodes get et set. J'ai juste besoin d'ajouter "?" dans la classe EnumTest lors de la déclaration d'une 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 les belles suggestions.

168
Sri Reddy

Vous pouvez soit utiliser le "?" opérateur pour un type nullable.

public Color? myColor = null;

Vous pouvez également utiliser la pratique standard pour les énumérations qui ne peuvent pas être NULL en prenant la valeur FIRST dans l’énumération (autrement dit 0) comme valeur par défaut. Par exemple dans un cas de couleur Aucun.

public Color myColor = Color.None;
333
Rodney S. Foley

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 consistent à ajouter un membre None:

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

Color color = Color.None;

... ou d'utiliser Nullable:

Color? color = null;
41
Tim Robinson

Rendez votre variable nullable. Comme:

Color? color = null;

ou

Nullable<Color> color = null;
22
Cj S.

Une énumération est un type "valeur" en C # (signifie que l’énumération est stockée sous quelque valeur que ce soit, et non comme une référence à un emplacement en mémoire où la valeur elle-même est stockée). Vous ne pouvez pas définir les types de valeur sur null (Null étant utilisé uniquement pour les types de référence).

Ceci étant dit, vous pouvez utiliser la classe Nullable<T> intégrée qui englobe les types de valeur de sorte que vous puissiez les définir sur null, vérifiez si elle HasValue et obtenez son Value réel. (Ce sont les deux méthodes sur les objets Nullable<T>.

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

Il existe également un raccourci que vous pouvez utiliser:

Color? color = null;

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

9
Crisfole

Je suppose que 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, vous ne devriez donc pas le définir sur null. Définir quelque chose sur null signifie que vous pointez un pointeur sur un objet à l'adresse zéro. Vous ne pouvez pas vraiment faire ça avec un int. Ce que vous voulez faire avec un int est de le définir sur une valeur que vous n’auriez normalement pas, afin que vous puissiez téléphoner si c’est une bonne valeur ou non. Alors, 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 telle qu'elle est actuellement, vous la définissez sur "rouge" car le rouge est zéro dans votre enum.

Alors,

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