Programování

Jak pracovat s typy s možnou hodnotou Null v C #

Jazyk C # poskytuje podporu pro dva typy dat: typy hodnot a referenční typy. Zatímco proměnná typu System.String je referenční typ, proměnná typu Int32 je typ hodnoty.

Přiřazení hodnoty null typu hodnoty bylo výzvou pro dlouhou dobu, dokud nebyl představen koncept typů s možnou hodnotou null. Hodnotu null nemůžete přiřadit přímo k typu hodnoty. Hodnotu null nemůžete přiřadit přímo k typu hodnoty. Hodnotu null můžete přiřadit k typu hodnoty pouze využitím výhod typů s možnou hodnotou null - funkce přidané k novějším verzím .Net Framework.

Typy s možnou hodnotou Null byly zavedeny v programovacím jazyce C #. Jedná se o instance pojmenované struktury Systém s možnou hodnotou Null. Při použití typu s možnou hodnotou Null můžete kromě hodnoty v rámci povoleného rozsahu pro typ hodnoty mít také hodnotu null. Pokud tedy máte logickou proměnnou s možnou hodnotou Null, možné hodnoty, které můžete logické proměnné přiřadit, zahrnují true, false nebo null. Tato funkce se hodí, zvláště když pracujete s daty uloženými v databázi a chcete přiřadit hodnoty typům hodnot, které mohou nebo nemusí být null.

Všimněte si, že můžete mít pouze typy hodnot s povolenou hodnotou Null - nemůžete mít referenční typy, které mají povolenou hodnotu Null. Referenční typy nemohou být typy s možnou hodnotou Null, protože mají podporu pro null - to znamená, že můžete libovolnému referenčnímu typu přiřadit hodnotu null. Typ hodnoty je odvozen od System.ValueType a obsahuje data uvnitř jeho vlastní alokace paměti. Jinými slovy, proměnné nebo objekty nebo typy hodnot mají svoji vlastní kopii dat.

Naopak se rozšiřuje referenční typ System.Object a ukazuje na místo v paměti, které obsahuje skutečná data. Je třeba poznamenat, že unární a binární operátory, které lze použít na typ hodnoty, lze také použít na jeho protějšek s možnou hodnotou Null. Následující fragment kódu ilustruje syntaxi pro definování typu s možnou hodnotou Null v C #.

System.Nullable variable = null;

nebo

T? proměnná = null;

Tady, T představuje datový typ proměnné. Následující příkaz by se nezkompiloval, protože nemůžete přiřadit hodnotu null typu hodnoty.

Int32 i = null;

Chcete-li přiřadit hodnotu null typu hodnoty, musíte využít výhod typu s možnou hodnotou null, jak je znázorněno v úryvku kódu níže.

Int32? i = null;

The HasValue a Hodnota vlastnosti

Existují dvě veřejné vlastnosti jen pro čtení, HasValue a Hodnota, v instanci typu s možnou hodnotou Null. Zatímco první se používá ke kontrole, zda proměnná s možnou hodnotou Null obsahuje hodnotu, druhá se používá k načtení hodnoty obsažené uvnitř proměnné s možnou hodnotou Null. Všimněte si, že HasValue má výchozí hodnotu false. Následující výpis kódu ukazuje, jak HasValue a Hodnota lze použít vlastnosti.

static void Main (řetězec [] args)

        {

Int32? i = 100;

if (i.HasValue)

            {

Console.WriteLine ("Hodnota proměnné i je:" + i.Value);

            }

jiný

            {

Console.WriteLine ("Hodnota proměnné i není definována.");

            }

Console.ReadLine ();

        }

Všimněte si, že můžete také zkontrolovat, zda je hodnota proměnné s možnou hodnotou Null null, jak je znázorněno v úryvku kódu níže.

Int32? i = 100;

if (i! = null)

Console.Writeline ("Hodnota proměnné i není null");

Implicitní a explicitní převody

Typ s možnou hodnotou Null můžete přetypovat na typ s nulovou hodnotou buď explicitně, nebo pomocí Hodnota vlastnictví. Následující fragment kódu to ilustruje.

Int32? i = null;

Int32 j = (Int32) i;

Je třeba poznamenat, že pokud zadáte typ s možnou hodnotou Null na typ s nulovou hodnotou a typ s možnou hodnotou Null obsahuje hodnotu null, narazíte na to InvalidOperationException.

Následující fragment kódu ukazuje, jak můžete provést implicitní přetypování při práci s typem s možnou hodnotou Null.

Int32? i = null;

i = 100;

Operátor nulování splynutí (??)

Operátor nulování splynutí (reprezentován jako ??) slouží k definování výchozí hodnoty, která by byla vrácena, když přiřadíte typ s možnou hodnotou Null k typu s možnou hodnotou Null. Zde je příklad kódu, který to ilustruje.

Int32? i = null;

Int32 j = i ?? 100;

Console.WriteLine ("Hodnota proměnné j je:" + j);

Hodnota proměnné i je přiřazen j pokud i není null. Pokud je hodnota proměnné i je null, proměnné je přiřazena celočíselná hodnota 100 j. Takto funguje operátor sloučení nuly.

$config[zx-auto] not found$config[zx-overlay] not found