Antworten:
Dies bedeutet, dass der betreffende Werttyp ein nullbarer Typ ist
Nullable-Typen sind Instanzen der System.Nullable-Struktur. Ein nullbarer Typ kann den korrekten Wertebereich für den zugrunde liegenden Wertetyp sowie einen zusätzlichen Nullwert darstellen. Beispielsweise kann einem
Nullable<Int32>
ausgesprochenen "Nullable of Int32" ein beliebiger Wert von -2147483648 bis 2147483647 zugewiesen werden, oder es kann der Nullwert zugewiesen werden. ANullable<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); } } }
int
Typ und eine entsprechende Integer
Klasse gibt.
Es ist eine Abkürzung für Nullable<int>
. Nullable<T>
wird verwendet, um das Setzen eines Werttyps zu ermöglichen null
. Werttypen können normalerweise nicht null sein .
value types
kann nicht null sein. Wenn Sie ein int oder ein bool (die Werttypen sind) deklarieren, ohne einen bestimmten Wert zuzuweisen, haben sie weiterhin Werte (0 bzw. false), d. H. Sie wären nicht null. Nicht zugewiesen reference types
, wie z. B. Objekt oder MyClass, ist dagegen null. Vielleicht möchten Sie sich über den Unterschied zwischen Werttypen und Referenztypen informieren.
Im
x ? "yes" : "no"
das ? erklärt einen if- Satz. Hier: x repräsentiert die boolesche Bedingung; Der Teil vor dem : ist der Dann- Satz und der Teil danach ist der Sonst- Satz.
In zum Beispiel
int?
das ? deklariert einen nullbaren Typ und bedeutet, dass der Typ davor einen Nullwert haben kann.
return value ? value : "isNull";
sagt mir, dass string value
nicht in bool konvertierbar ist.
Nullable-Typen sind Instanzen der System.Nullable-Struktur. Ein nullbarer Typ kann den normalen Wertebereich für den zugrunde liegenden Wertetyp sowie einen zusätzlichen Nullwert darstellen . Beispielsweise kann einem [
Nullable<Int32>
], ausgesprochen "Nullable of Int32", ein beliebiger Wert von -2147483648 bis 2147483647 zugewiesen werden, oder es kann der Nullwert zugewiesen werden. Einem [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 erklärt, dass der Typ nullbar 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 nullbaren Wertetyp handelt
Beachten Sie, dass für NullableTest kein Kompilierungsfehler vorliegt. (Beachten Sie das? in der Erklärung von t2)
int?
ist eine Abkürzung für Nullable<int>
. Die beiden Formen sind austauschbar.
Nullable<T>
ist ein Operator, den Sie mit einem Werttyp verwenden können T
, um ihn zu akzeptieren null
.
Falls Sie noch nicht wissen: Werttypen sind Typen , die Werte als akzeptiert int
, bool
, char
etc ...
Sie können keine Verweise auf Werte akzeptieren: Sie würden einen Fehler bei der Kompilierung erzeugen, wenn Sie ihnen a zuweisen null
, im Gegensatz zu Referenztypen , die dies offensichtlich akzeptieren können.
Warum brauchst du das? Denn manchmal können Ihre Werttypvariablen Nullreferenzen erhalten, die von etwas zurückgegeben werden, das nicht sehr gut funktioniert, wie z. B. einer fehlenden oder undefinierten Variablen, die von einer Datenbank zurückgegeben wird.
Ich empfehle Ihnen, die Microsoft-Dokumentation zu lesen, da sie das Thema recht gut abdeckt.