Udostępnij za pośrednictwem


Używanie typów dopuszczających wartości zerowe (Przewodnik programowania w języku C#)

Typy Nullable może reprezentować wszystkich wartości typu podstawowych i dodatkowych null wartości.Typy Nullable są uznane za jeden z dwóch sposobów:

System.Nullable<T> variable

- lub -

T? variable

Tjest typem podstawowym typem niewymaganym.Tmoże być dowolny typ wartości łącznie z struct; nie może być typem odwołania.

Przykładem, kiedy można użyć typu NULL, należy rozważyć, jak zwykłe zmienna logiczna może mieć dwie wartości: PRAWDA i FAŁSZ.Nie ma żadnej wartości, który oznacza "undefined".W wielu aplikacjach programowania przede wszystkim database interakcje, zmiennych mogą występować w stanie niezdefiniowany.Na przykład pola w bazie danych może zawierać wartości PRAWDA lub FAŁSZ, ale może również zawierać żadnej wartości w ogóle.Podobnie, można ustawić typy odwołań null , aby wskazać, że nie jest inicjowany.

Ta rozbieżność, można utworzyć dodatkowe programowania pracy z dodatkowe zmienne używane do przechowywania informacji o stanie, stosowanie specjalnych wartości i tak dalej.Modyfikator typem niewymaganym umożliwia C# utworzyć typ wartości zmiennych, które wskazują niezdefiniowana wartość.

Przykłady typów Nullable

Dowolny typ wartości mogą służyć jako podstawa dla typu null.Na przykład:

int? i = 10;
double? d1 = 3.14;
bool? flag = null;
char? letter = 'a';
int?[] arr = new int?[10];

Członkowie Nullable typów

Każde wystąpienie typu null ma dwie publiczne właściwości tylko do odczytu:

  • HasValue

    HasValueTyp jest bool.Jest równa true kiedy zmienna zawiera wartość niezerową.

  • Value

    Valuejest tego samego typu, jak typ podstawowy.Jeśli HasValue jest true, Value zawiera odpowiednią wartość.If HasValue is false, accessing Value will throw a InvalidOperationException.

W tym przykładzie HasValue element jest używany do testowania, czy zmienna zawiera wartość, zanim spróbuje go wyświetlić.

int? x = 10;
if (x.HasValue)
{
    System.Console.WriteLine(x.Value);
}
else
{
    System.Console.WriteLine("Undefined");
}

Badania na wartość może być wykonane jak w poniższym przykładzie:

int? y = 10;
if (y != null)
{
    System.Console.WriteLine(y.Value);
}
else
{
    System.Console.WriteLine("Undefined");
}

Konwersje jawne

Typem niewymaganym można rzutować typu regularnych, wyraźnie z wytopu lub za pomocą Value właściwości.Na przykład:

int? n = null;

//int m1 = n;      // Will not compile. 
int m2 = (int)n;   // Compiles, but will create an exception if n is null. 
int m3 = n.Value;  // Compiles, but will create an exception if n is null.

Jeśli zdefiniowano zdefiniowana przez użytkownika konwersja między typami danych dwóch samego konwersji można również z nullable wersje tych typów danych.

Konwersje niejawne

Zmienna typu NULL można ustawić na wartość zerową, z null słowa kluczowego, jak pokazano w następującym przykładzie:

int? n1 = null;

Konwersja z typu zwykłych do typu null jest niejawne.

int? n2;
n2 = 10;  // Implicit conversion.

Podmioty gospodarcze

Jednoargumentowy wstępnie zdefiniowanych i operatory dwuargumentowe i zdefiniowane przez użytkownika operatorów, które istnieją dla typów wartości może również używane przez typu null.Tych operatorów daje wartość null, jeśli operandy są równe null; w przeciwnym razie operator używa zamkniętego wartości do obliczenia wyniku.Na przykład:

int? a = 10;
int? b = null;

a++;         // Increment by 1, now a is 11.
a = a * 10;  // Multiply by 10, now a is 110.
a = a + b;   // Add b, now a is null.

Po wykonaniu porównania z typami NULL, jeśli wartość typu null jest null, a drugiej nie jest wszystkie porównania oceniają false z wyjątkiem != (nie równych).Ważne, aby nie zakładać, że ponieważ zwraca szczególną porównanie jest false, w przeciwnym wypadku zwraca true.W poniższym przykładzie 10 nie jest większa, mniejsza niż ani równa null.Tylko num1 != num2 wynikiem true.

int? num1 = 10;
int? num2 = null;
if (num1 >= num2)
{
    Console.WriteLine("num1 is greater than or equal to num2");
}
else
{
    // This clause is selected, but num1 is not less than num2.
    Console.WriteLine("num1 >= num2 returned false (but num1 < num2 also is false)");
}

if (num1 < num2)
{
    Console.WriteLine("num1 is less than num2");
}
else
{
    // The else clause is selected again, but num1 is not greater than 
    // or equal to num2.
    Console.WriteLine("num1 < num2 returned false (but num1 >= num2 also is false)");
}

if (num1 != num2)
{
    // This comparison is true, num1 and num2 are not equal.
    Console.WriteLine("Finally, num1 != num2 returns true!");
}

// Change the value of num1, so that both num1 and num2 are null.
num1 = null;
if (num1 == num2)
{
    // The equality comparison returns true when both operands are null.
    Console.WriteLine("num1 == num2 returns true when the value of each is null");
}

/* Output:
 * num1 >= num2 returned false (but num1 < num2 also is false)
 * num1 < num2 returned false (but num1 >= num2 also is false)
 * Finally, num1 != num2 returns true!
 * num1 == num2 returns true when the value of each is null
 */

Wynikiem porównania równości z dwóch typów nullable, które są zarówno null true.

??Operator

?? Operator określa wartość domyślną, która jest zwracana, gdy typem niewymaganym jest przypisany do typu null.

int? c = null;

// d = c, unless c is null, in which case d = -1. 
int d = c ?? -1;

Ten operator można również z wielu typów nullable.Na przykład:

int? e = null;
int? f = null;

// g = e or f, unless e and f are both null, in which case g = -1. 
int g = e ?? f ?? -1;

Bool?Typ

bool? Typem niewymaganym może zawierać trzy różne wartości: true, false i null.Aby uzyskać informacje na temat rzutować z bool?Aby bool, zobacz Porady: bezpieczne rzutowanie bool? na bool (Przewodnik programowania w języku C#).

Wartości NULL logiczne są podobne Boolean typu zmiennej, która jest używana w języku SQL.Aby zapewnić, że wyniki uzyskane przez & i| podmioty gospodarcze są zgodne z trzech wyceniana typu Boolean w języku SQL, są dostarczane następujące operatory wstępnie zdefiniowane:

bool? operator &(bool? x, bool? y)

bool? operator |(bool? x, bool? y)

Wyniki te podmioty gospodarcze są wymienione w poniższej tabeli:

X

y

x i y

x|y

PRAWDA

PRAWDA

PRAWDA

PRAWDA

PRAWDA

FAŁSZ

FAŁSZ

PRAWDA

PRAWDA

NULL

NULL

PRAWDA

FAŁSZ

PRAWDA

FAŁSZ

PRAWDA

FAŁSZ

FAŁSZ

FAŁSZ

FAŁSZ

FAŁSZ

NULL

FAŁSZ

NULL

NULL

PRAWDA

NULL

PRAWDA

NULL

FAŁSZ

FAŁSZ

NULL

NULL

NULL

NULL

NULL

Zobacz też

Informacje

Typy dopuszczające wartości zerowe (Przewodnik programowania w języku C#)

Konwersja boxing typów dopuszczających wartości zerowe (Przewodnik programowania w języku C#)

Koncepcje

Przewodnik programowania w języku C#

Typy o wartości zerowalnej (Visual Basic)