Jaka jest domyślna wartość zmiennej wystąpienia klasy w języku C # int?
?
Na przykład w poniższym kodzie jaka będzie wartość, MyNullableInt
jeśli nigdy nie zostanie jawnie przypisana?
class MyClass
{
public int? MyNullableInt;
}
(Wydaje się prawdopodobne, że odpowiedź prawie na pewno brzmi albo null
albo 0
, ale która z nich to jest?)
int? x;
i zobaczyć, jaki jest wynik?Odpowiedzi:
Wartość domyślna dla
int?
- i dla każdego typu dopuszczającego wartość null, który używa znaku „type?” deklaracja - jestnull
.Dlaczego tak się dzieje:
int?
jest cukrem syntaktycznym dla typu Nullable <T> (gdzie T jestint
), strukturą. ( odniesienie )Nullable<T>
Typ ma hasValue bool człon, który podczasfalse
sprawia, żeNullable<T>
instancja „akt jak”null
wartości. W szczególności metoda Nullable <T> .Equals jest zastępowana w celu zwrócenia,true
gdyNullable<T>
withHasValue == false
jest porównywana znull
wartością rzeczywistą .null
.bool
zmiennej w C # tofalse
( odwołanie ). DlategoHasValue
właściwośćNullable<T>
wystąpienia domyślnego tofalse
; co z kolei sprawia, żeNullable<T>
sama instancja zachowuje się jaknull
.źródło
int? x = null;
naint? x;
, otrzymuję błędy kompilatora w dalszej części kodu: „Użycie nieprzypisanej zmiennej lokalnej x”.Field 'id' is never assigned to, and will always have its default value 0
. Dziwne, prawda?Czułem, że ważne jest udostępnienie
Nullable<T>.GetValueOrDefault()
metody, która jest szczególnie przydatna podczas pracy z obliczeniami matematycznymi wykorzystującymi wartościNullable<int>
akaint?
. Wiele razy nie musisz sprawdzaćHasValue
właściwości i możesz po prostu użyćGetValueOrDefault()
zamiast tego.źródło
źródło