Normalerweise wird das Fragezeichen hauptsächlich für die Bedingung x ? "yes" : "no"
Verwendet.
Aber ich habe eine andere Verwendung dafür gesehen, kann aber keine Erklärung für diese Verwendung des Operators ?
Finden.
public int? myProperty
{
get;
set;
}
Dies bedeutet, dass der betreffende Werttyp ein nullbarer Typ ist
Nullable-Typen sind Instanzen der System.Nullable-Struktur. Ein nullfähiger Typ kann den korrekten Wertebereich für den zugrunde liegenden Wertetyp sowie einen zusätzlichen Nullwert darstellen. Zum Beispiel ein
Nullable<Int32>
, ausgesprochen "Nullable of Int32", kann ein beliebiger Wert von -2147483648 bis 2147483647 zugewiesen werden, oder es kann der Nullwert zugewiesen werden. EINNullable<bool>
können die Werte true, false oder null zugewiesen werden. Die Möglichkeit, numerischen und booleschen Typen Null zuzuweisen, ist besonders nützlich, wenn Sie mit Datenbanken und anderen Datentypen arbeiten, die Elemente enthalten, denen möglicherweise kein Wert zugewiesen wurde. Beispielsweise kann ein Boolesches Feld in einer Datenbank die Werte true oder false speichern oder undefiniert sein.class NullableExample { static void Main() { int? num = null; // Is the HasValue property true? if (num.HasValue) { System.Console.WriteLine("num = " + num.Value); } else { System.Console.WriteLine("num = Null"); } // y is set to zero int y = num.GetValueOrDefault(); // num.Value throws an InvalidOperationException if num.HasValue is false try { y = num.Value; } catch (System.InvalidOperationException e) { System.Console.WriteLine(e.Message); } } }
Es ist eine Abkürzung für Nullable<int>
. Nullable<T>
ermöglicht das Setzen eines Wertetyps auf null
. Werttypen normalerweise kann nicht null sein .
Im
x ? "yes" : "no"
das ? deklariert einen if Satz. Hier: x repräsentiert die Boolesche Bedingung; Der Teil vor dem : ist der dann Satz und der Teil nach dem sonst Satz.
In zum Beispiel
int?
das ? deklariert einen nullfähigen Typ und bedeutet, dass der Typ davor einen Nullwert haben kann.
Nullable-Typen sind Instanzen der System.Nullable-Struktur. Ein nullwertfähiger Typ kann den normalen Wertebereich für den zugrunde liegenden Wertetyp sowie einen zusätzlichen Nullwert darstellen. Zum Beispiel ein [
Nullable<Int32>
], ausgesprochen "Nullable of Int32", kann ein beliebiger Wert von -2147483648 bis 2147483647 zugewiesen werden, oder es kann der Nullwert zugewiesen werden. EIN [Nullable<bool>
] können die Werte true oder false oder null zugewiesen werden. Die Möglichkeit, numerischen und booleschen Typen Null zuzuweisen, ist besonders nützlich, wenn Sie mit Datenbanken und anderen Datentypen arbeiten, die Elemente enthalten, denen möglicherweise kein Wert zugewiesen wurde. Beispielsweise kann ein Boolesches Feld in einer Datenbank die Werte true oder false speichern oder undefiniert sein.
es gibt an, dass der Typ nullwertfähig ist.
praktische Anwendung:
public string someFunctionThatMayBeCalledWithNullAndReturnsString(int? value)
{
if (value == null)
{
return "bad value";
}
return someFunctionThatHandlesIntAndReturnsString(value);
}
Um die obigen Antworten zu ergänzen, finden Sie hier ein Codebeispiel
struct Test
{
int something;
}
struct NullableTest
{
int something;
}
class Example
{
public void Demo()
{
Test t = new Test();
t = null;
NullableTest? t2 = new NullableTest();
t2 = null;
}
}
Dies würde einen Kompilierungsfehler ergeben:
Fehler 12 Null kann nicht in 'Test' konvertiert werden, da es sich um einen nicht nullwertfähigen Werttyp handelt
Beachten Sie, dass für NullableTest kein Kompilierungsfehler vorliegt. (Beachten Sie das? in der Deklaration von t2)
int?
steht für Nullable<int>
. Die beiden Formen sind austauschbar.
Nullable<T>
ist ein Operator, den Sie mit einem Werttyp T
verwenden können, damit er null
akzeptiert.
Falls Sie es nicht wissen: Werttypen sind Typen, die Werte wie int
, bool
, char
usw. akzeptieren.
Sie können keine Referenzen auf Werte akzeptieren: Sie würden einen Fehler beim Kompilieren erzeugen, wenn Sie ihnen ein null
zuweisen, im Gegensatz zu Referenztypen , das dies offensichtlich akzeptieren kann.
Warum brauchst du das? Weil Ihre Werttypvariablen manchmal Nullreferenzen empfangen konnten, die von etwas zurückgegeben wurden, das nicht sehr gut funktionierte, wie eine fehlende oder undefinierte Variable, die von einer Datenbank zurückgegeben wurde.
Ich empfehle Ihnen, die Microsoft-Dokumentation zu lesen, da sie das Thema ziemlich gut abdeckt.