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?

War es hilfreich?

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.“

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top