So arbeiten Sie mit nullbaren Typen in C #
Die C # -Sprache unterstützt zwei Datentypen: Werttypen und Referenztypen. Während eine Variable vom Typ System.String
ein Referenztyp ist, ist eine Variable vom Typ Int32
ein Werttyp.
Das Zuweisen eines Nullwerts zu einem Werttyp war lange Zeit eine Herausforderung, bis das Konzept der nullbaren Typen eingeführt wurde. Sie können einem Werttyp keinen Nullwert direkt zuweisen. Sie können einem Werttyp keinen Nullwert direkt zuweisen. Sie können einem Werttyp nur dann einen Nullwert zuweisen, wenn Sie nullfähige Typen nutzen - eine Funktion, die den neueren Versionen von .Net Framework hinzugefügt wurde.
In der Programmiersprache C # wurden nullfähige Typen eingeführt. Dies sind Instanzen der genannten Struktur System.Nullable
. Bei Verwendung eines nullbaren Typs können Sie neben dem Wert innerhalb des zulässigen Bereichs für den Werttyp auch einen Nullwert haben. Wenn Sie also eine nullfähige boolesche Variable haben, können Sie der booleschen Variablen möglicherweise true, false oder null zuweisen. Diese Funktion ist besonders nützlich, wenn Sie mit Daten arbeiten, die sich in der Datenbank befinden, und Werttypen Werte zuweisen möchten, die möglicherweise null sind oder nicht.
Beachten Sie, dass Sie nur Werttypen als nullbar haben können - Sie können keine Referenztypen haben, die nullbar sind. Referenztypen können keine nullbaren Typen sein, da sie null unterstützen. Das heißt, Sie können jedem Referenztyp den Wert null zuweisen. Ein Werttyp leitet sich von System.ValueType
den Daten ab und enthält diese in seiner eigenen Speicherzuordnung. Mit anderen Worten, Variablen oder Objekte oder Werttypen haben eine eigene Kopie der Daten.
Im Gegenteil, ein Referenztyp wird erweitert System.Object
und zeigt auf eine Stelle im Speicher, die die tatsächlichen Daten enthält. Es ist zu beachten, dass alle unären und binären Operatoren, die für einen Werttyp verwendet werden können, auch auf sein nullbares Gegenstück angewendet werden können. Das folgende Codeausschnitt veranschaulicht die Syntax zum Definieren eines nullbaren Typs in C #.
System.Nullable variable = null;
or
T? variable = null;
Hier wird T
der Datentyp der Variablen dargestellt. Die folgende Anweisung wird nicht kompiliert, da Sie einem Werttyp keinen Nullwert zuweisen können.
Int32 i = null;
Um einem Werttyp einen Nullwert zuzuweisen, müssen Sie einen Nullwerttyp verwenden, wie im folgenden Codeausschnitt gezeigt.
Int32? i = null;
Die HasValue
und Value
Eigenschaften
Es gibt zwei öffentliche schreibgeschützte Eigenschaften HasValue
und Value
in einer Instanz eines nullbaren Typs. Während erstere verwendet wird, um zu überprüfen, ob die nullfähige Variable einen Wert enthält, wird letztere verwendet, um den in der nullbaren Variablen enthaltenen Wert abzurufen. Beachten Sie, dass HasValue
der Standardwert false ist. Die folgende Codeliste zeigt, wie die Eigenschaften HasValue
und Value
verwendet werden können.
static void Main(string[] args)
{
Int32? i = 100;
if (i.HasValue)
{
Console.WriteLine("The value of the variable i is: "+i.Value);
}
else
{
Console.WriteLine("The value of the variable i is undefined.");
}
Console.ReadLine();
}
Beachten Sie, dass Sie auch überprüfen können, ob der Wert einer nullfähigen Variablen null ist, wie im folgenden Codeausschnitt gezeigt.
Int32? i = 100;
if(i != null)
Console.Writeline("The value of the variable i is not null");
Implizite und explizite Konvertierungen
Sie können einen nullbaren Typ entweder explizit oder mithilfe der Value
Eigenschaft in einen nicht nullbaren Typ umwandeln . Das folgende Codefragment veranschaulicht dies.
Int32? i = null;
Int32 j = (Int32)i;
Es sollte beachtet werden, dass, wenn Sie einen nullbaren Typ in einen nicht nullbaren Typ umwandeln und der nullbare Typ einen Nullwert enthält, Sie auf etwas stoßen würden InvalidOperationException
.
Das folgende Codeausschnitt zeigt, wie Sie eine implizite Umwandlung durchführen können, wenn Sie mit einem nullbaren Typ arbeiten.
Int32? i = null;
i = 100;
Der Null-Koaleszenz-Operator ( ??
)
Der Null-Koaleszenzoperator (dargestellt als ??
) wird verwendet, um den Standardwert zu definieren, der zurückgegeben wird, wenn Sie einem nicht nullbaren Typ einen nullbaren Typ zuweisen. Hier ist ein Codebeispiel, das dies veranschaulicht.
Int32? i = null;
Int32 j = i ?? 100;
Console.WriteLine("The value of the variable j is: " + j);
Der Wert der Variablen i
wird zugewiesen, j
wenn i nicht null ist. Wenn der Wert der Variablen i
null ist, wird der Variablen ein ganzzahliger Wert 100 zugewiesen j
. So funktioniert der Null-Koaleszenz-Operator.