2010-12-02 14 views
132

que tienen una enumeraciónCómo establecer enumeración en nulo

string name; 

public enum Color 
{ 
    Red, 
    Green, 
    Yellow 
} 

cómo configurarlo a NULL en caso de carga.

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

Editado: Mi mal, yo no explicó adecuadamente. Pero todas las respuestas relacionadas con los nulos son perfectas. Mi situación es What what, he get/set para la enumeración en una clase con otros elementos como nombre, etc. En la carga de la página, reinicializo la clase y trato de establecer los valores por defecto a null. Aquí está el panorama (Código 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; //??? 
     } 
    } 

} 

Luego, utilizando las siguientes sugerencias he cambiado el código anterior para que funcione con métodos get y set. Solo necesito agregar "?" en clase EnumTest durante la declaración de la variable de enumeración privado y en el método/sistema get:

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

} 

Gracias a todos por las sugerencias preciosas.

+0

duplicado posible de [# enumeraciones C:? Anulable o 'Unknown' Valor] (http://stackoverflow.com/questions/1795657/c-sharp-enums-nullable-or- valor desconocido) –

Respuesta

264

Usted puede utilizar el operador para un tipo anulable.

public Color? myColor = null; 

O utilice la práctica estándar para las enumeraciones que no puede ser nula por tener el primer valor de la enumeración (aka 0) es el valor predeterminado. Por ejemplo, en un caso de color Ninguno.

public Color myColor = Color.None; 
+58

+1 para el valor predeterminado. –

+0

@equiman no es necesario emitir ya que el tipo se especifica a la izquierda, básicamente está duplicando la primera parte de mi respuesta que ya está aceptada. –

+2

esto respondió mi pregunta: * ¿Puedes agregar '?' a enumname para hacerlo nulo? * – LuckyLikey

14

Haz que tu variable se pueda anular. Así como: "?"

Color? color = null; 

o

Nullable<Color> color = null; 
4

una enumeración es un tipo "valor" en C# (los medios de la enumeración se almacena como cualquier valor que es, no como una referencia a una colección de valores). No puede establecer los tipos de valor como nulos (dado que null se usa únicamente para los tipos de referencia).

Dicho esto se puede utilizar el construido en Nullable<T> clase que envuelve tipos de valor que se puede establecer en null, comprobar si HasValue y obtener su real Value. (Esos son los dos métodos en los Nullable<T> objetos

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

También hay un acceso directo que puede utilizar:

Color? color = null; 

Eso es lo mismo que Nullable<Color>;

31

Si esto es C#, él. no funcionará: las enumeraciones son tipos de valores y no pueden ser null.

Las opciones normales son agregar un miembro None:

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

Color color = Color.None; 

... o utilizar Nullable:

Color? color = null; 
4

Asumo C++ aquí. Si usa C#, probablemente la respuesta sea la misma, pero la sintaxis será un poco diferente. La enumeración es un conjunto de valores int. No es un objeto, por lo que no debería establecerlo en nulo. Establecer algo en nulo significa que está apuntando un puntero a un objeto para direccionar cero. Realmente no se puede hacer eso con un int. Lo que quiere hacer con un int es establecerlo en un valor que normalmente no tendría, de modo que pueda saber si tiene un buen valor o no. lo tanto, establecer su color a -1

Color color = -1; 

O bien, puede iniciar su enumeración en 1 y ponerlo a cero. Si configura el color en cero como lo está ahora, lo establecerá en "rojo" porque el rojo es cero en su enumeración.

Así,

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