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.Stringein Referenztyp ist, ist eine Variable vom Typ Int32ein 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.ValueTypeden 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.Objectund 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 Tder 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 HasValueund ValueEigenschaften

Es gibt zwei öffentliche schreibgeschützte Eigenschaften HasValueund Valuein 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 HasValueder Standardwert false ist. Die folgende Codeliste zeigt, wie die Eigenschaften HasValueund Valueverwendet 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 ValueEigenschaft 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 iwird zugewiesen, jwenn i nicht null ist. Wenn der Wert der Variablen inull ist, wird der Variablen ein ganzzahliger Wert 100 zugewiesen j. So funktioniert der Null-Koaleszenz-Operator.