Das ?
Symbol nach einem Typ ist nur eine Verknüpfung zu Nullable type, bool?
entspricht Nullable<bool>
.
bool
ist ein value type, bedeutet dies, dass es nicht null
sein kann, so dass die Nullable-Typ im Grunde können Sie Werttypen wickeln, und in der Lage null
ihnen zuweisen.
bool?
können drei verschiedene Werte enthalten: true
, false
und null
.
Auch gibt es keine Kurzschlüsse Operatoren (& & ||) definiert für bool?
nur die logische AND, OR inklusive sind Operatoren definiert und sie verhalten sich wie folgt aus:
x y x & y x | y
true true true true
true false false true
true null null true
false true false true
false false false false
false null false null
null true null true
null false false null
null null null null
der Nullable-Typ ist im Grunde eine generische Struktur, die die folgenden öffentlichen Eigenschaften hat:
public struct Nullable<T> where T: struct
{
public bool HasValue { get; }
public T Value { get; }
}
Die HasValue
-Eigenschaft gibt an, ob das aktuelle Objekt einen Wert aufweist und die Value
-Eigenschaft den aktuellen Wert des Objekts abruft, oder falls HasValue den Wert false hat, wird eine InvalidOperationException ausgelöst.
Jetzt müssen Sie sich etwas fragen, Nullable ist eine Struktur, ein Werttyp, der nicht null sein kann, also warum die folgende Aussage gültig ist?
int? a = null;
Das Beispiel wird in dieser kompiliert:
.locals init (valuetype [mscorlib]System.Nullable`1<int32> V_0)
IL_0000: ldloca.s V_0
IL_0002: initobj valuetype [mscorlib]System.Nullable`1<int32>
Ein Aufruf von initobj, die an einer bestimmten Adresse zu einer Nullreferenz oder ein 0 an dem entsprechenden primitiven Typ jedes Feld des Werttypen initialisiert .
Das ist es, was hier passiert ist die Standardeinstellung struct initialization.
int? a = null;
entspricht:
Nullable<int> a = new Nullable<int>();
mögliche Duplikat von [Was bedeutet "DateTime?" meinst du in C#?] (http://stackoverflow.com/questions/109859/what-does-datetime-mean-in-c) – nawfal