Mam wyliczenie
string name;
public enum Color
{
Red,
Green,
Yellow
}
Jak ustawić na NULL podczas ładowania.
name = "";
Color color = null; //error
Edytowane: Mój zły, nie wyjaśniłem tego poprawnie. Ale wszystkie odpowiedzi dotyczące nullable są idealne. Moja sytuacja brzmi: co, jeśli mam / ustawiam wyliczenie w klasie z innymi elementami, takimi jak nazwa itp. Podczas ładowania strony inicjalizuję klasę i próbuję ustawić wartości domyślne na null. Oto scenariusz (kod znajduje się w 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; //???
}
}
}
Następnie korzystając z poniższych sugestii zmieniłem powyższy kod, aby działał z metodami get i set. Muszę tylko dodać „?” w klasie EnumTest podczas deklaracji prywatnej zmiennej enum oraz w metodzie 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; }
}
}
Dzięki wszystkim za cudowne sugestie.
Odpowiedzi:
Możesz użyć „?” operator dla typu zerowalnego.
Lub skorzystaj ze standardowej praktyki dla wyliczeń, które nie mogą być zerowe, ponieważ PIERWSZA wartość w wyliczeniu (czyli 0) będzie wartością domyślną. Na przykład w przypadku koloru Brak.
źródło
Jeśli jest to C #, to nie zadziała: wyliczenia są typami wartości i nie mogą być
null
.Normalne opcje to dodanie
None
członka:... lub użyć
Nullable
:źródło
Uczyń swoją zmienną zerową. Lubić:
lub
źródło
Wyliczenie jest typem „wartości” w języku C # (oznacza, że wyliczenie jest przechowywane jako dowolna wartość, a nie jako odniesienie do miejsca w pamięci, w którym przechowywana jest sama wartość). Nie można ustawić typów wartości na null (ponieważ null jest używany tylko dla typów referencyjnych).
Biorąc to pod uwagę, możesz użyć wbudowanej
Nullable<T>
klasy, która otacza typy wartości tak, że możesz ustawić je na null, sprawdzić, czy jestHasValue
ono rzeczywisteValue
. (Są to obie metody naNullable<T>
obiektach.Istnieje również skrót, którego możesz użyć:
To jest to samo co
Nullable<Color>
;źródło
Zakładam c ++ tutaj. Jeśli używasz c #, odpowiedź jest prawdopodobnie taka sama, ale składnia będzie nieco inna. Wyliczenie jest zbiorem wartości int. To nie jest obiekt, więc nie powinieneś ustawiać go na zero. Ustawienie wartości na zero oznacza, że wskazujesz obiekt na adres, aby zająć zero. Naprawdę nie możesz tego zrobić z int. To, co chcesz zrobić z int, to ustawić go na wartość, w której normalnie byś go nie miał, abyś mógł tel, jeśli jest to dobra wartość, czy nie. Ustaw kolor na -1
Możesz też rozpocząć enum od 1 i ustawić go na zero. Jeśli ustawisz kolor na zero, tak jak jest teraz, ustawisz go na „czerwony”, ponieważ czerwony jest w twoim wyliczeniu zero.
Więc,
źródło
Ponieważ
enum
wartość domyślna jest równa 0, wywołaniedefault(Color)
spowoduje wydrukowanieNone
.Ponieważ jest na pierwszej pozycji, przypisanie wartości dosłownej 0 do dowolnej innej stałej zmieniłoby to zachowanie, również zmiana kolejności występowania zmieniłaby wynik
default(Color)
( https://stackoverflow.com/a/4967673/8611327 )źródło
lub możesz użyć
przykład, w którym przypisanie wartości null nie zadziała
dzięki czemu możesz użyć:
źródło