Gibt es einen Unterschied zwischen Typ?und null-Werte zulässt<type>?
Frage
In C# werden die null-Werte zulässt primitive Typen (d.h. bool?
) nur Aliase für Ihre entsprechenden Nullable<T>
geben oder gibt es einen Unterschied zwischen den beiden?
Lösung
Wenn Sie sich die IL schauen mit Ildasm , werden Sie feststellen, dass sie beide kompilieren bis Nullable<bool>
.
Andere Tipps
Es gibt keinen Unterschied zwischen bool? b = null
und Nullable<bool> b = null
. Die ?
ist nur C # Compiler Syntax Zucker.
Um den Wert des Bool zugreifen? Sie müssen folgendes tun:
bool? myValue = true;
bool hasValue = false;
if (myValue.HasValue && myValue.Value)
{
hasValue = true;
}
Hinweis: Sie können nicht nur tun:
if (myValue)
{
hasValue = true;
}
Ich bin überrascht, niemand an die Quelle ging (die C # spec) vor. Von §4.1.10 Nullable-Typen:
Ein Nullable Type ist T geschrieben ?, wobei T der zugrunde liegende Typ ist. Diese Syntax ist eine Abkürzung für System.Nullable
, und die beiden Formen können austauschbar verwendet werden.
Also, nein, es gibt keinen Unterschied zwischen den beiden Formen. (Sie Angenommen, Sie haben keine andere Art genannt Nullable<T>
in einem der Namespaces Sie verwenden.)
A Nullable<T>
ist eine Struktur bestehend aus einem T und einem Bit-Flag, das angibt, ob das T gültig ist oder nicht.A Nullable<bool>
hat drei mögliche Werte:wahr, falsch und null.
Bearbeiten: Ah, ich habe die Tatsache übersehen, dass das Fragezeichen nach „bool“ tatsächlich Teil des Typnamens war und kein Hinweis darauf, dass Sie eine Frage gestellt haben :).Die Antwort auf Ihre Frage lautet also: „Ja, das C# bool?
ist nur ein Alias für Nullable<bool>
".
Ein bool
ist ein Werttyp, daher ist es nicht einen NULL-Wert enthalten kann. Wenn Sie einen beliebigen Wert Typ mit Nullable<>
wickeln, wird es diese Fähigkeit geben. Außerdem Methoden Zugriff auf die Wertänderung durch zusätzliche Eigenschaften HasValue
und Value
.
Aber auf die Frage: Nullable<bool>
und bool?
sind Aliase
Nein, es gibt keinen Unterschied.In Summe:
System.Boolean -> gültige Werte:wahr falsch
bool -> Alias für System.Boolean
Nullable<bool> -> gültige Werte:wahr, falsch, null
bool?-> Alias für Nullable<bool>
Hoffe das hilft.
Null Primitive sind nur regelmäßig in Nullable gewickelt Primitiven. Jegliche Erscheinungen im Gegenteil sind nur die Compiler und syntaktischer Zucker.
Kein Unterschied. Schauen Sie hier: http://msdn.microsoft.com/en-us/ Bibliothek / 1t3y8s4s.aspx
„Die Syntax T? Ist eine Abkürzung für Nullable, wobei T ein Werttyp ist. Die beiden Formen sind austauschbar.“