c# - clase - Cómo configurar enum a null
enum c# unity (5)
Tengo una enumeración
string name;
public enum Color
{
Red,
Green,
Yellow
}
Cómo establecerlo en NULL en carga.
name = "";
Color color = null; //error
Editado: Mi mal, no lo expliqué correctamente. 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 escenario (el 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, usando las sugerencias a continuación, cambié el código anterior para que funcione con los métodos get y set. Solo necesito agregar "?" en la clase EnumTest durante la declaración de la variable enum privada y en el método 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; }
}
}
Gracias a todos por las encantadoras sugerencias.
Estoy asumiendo 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. Por lo tanto, establece tu color en -1
Color color = -1;
O bien, puede iniciar su enumeración en 1 y configurarlo en cero. Si configura el color en cero como lo está ahora, lo establecerá en "rojo" porque el rojo es cero en su enumeración.
Asi que,
enum Color {
red =1
blue,
green
}
//red is 1, blue is 2, green is 3
Color mycolour = 0;
Haz que tu variable sea nulable. Me gusta:
Color? color = null;
o
Nullable<Color> color = null;
Puedes usar el "?" operador para un tipo anulable.
public Color? myColor = null;
O use la práctica estándar para enumeraciones que no pueden ser nulas al tener el valor FIRST en la enumeración (aka 0) como el valor predeterminado. Por ejemplo, en un caso de color Ninguno.
public Color myColor = Color.None;
Si esto es C #, 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 para usar Nullable
:
Color? color = null;
Una enumeración es un tipo de "valor" en C # (significa que la enumeración se almacena como cualquier valor que sea, no como una referencia a un lugar en la memoria donde se almacena el valor en sí). No puede establecer los tipos de valor como nulos (dado que null se usa únicamente para los tipos de referencia).
Dicho esto, puede usar la clase incorporada Nullable<T>
que ajusta los tipos de valor de manera que puede establecerlos como nulos, comprobar si tiene HasValue
y obtener su Value
real. (Esos son ambos métodos en los Nullable<T>
.
name = "";
Nullable<Color> color = null; //This will work.
También hay un acceso directo que puede usar:
Color? color = null;
Eso es lo mismo que Nullable<Color>
;