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.