Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp_Prog_Guide.doc
Скачиваний:
16
Добавлен:
16.11.2019
Размер:
6.22 Mб
Скачать

Типы, допускающие значения null

Тип, допускающие значения null, являются экземплярами структуры System..::.Nullable<(Of <(T>)>). Тип, допускающий значения null, может представлять правильный диапазон значений для своего базового типа значений и дополнительное пустое значение null. Например, для Nullable<Int32>, называемого "тип Int32, допускающий значения null", можно назначить любое значение от -2 147 483 648 до 2 147 483 647 или значение null. Для Nullable<bool> можно назначить значения true, false или null. Возможность назначения значения null для числовых и логических типов особенно полезна при работе с базами данных и другими типами данных, содержащих элементы, которым может быть не назначено значение. Например, логическое поле в базе данных может хранить значения true или false или может быть не задано.

------

Выходные данные показаны в примере:

num = Null

Nullable object must have a value.

Nullable Types Overview

Nullable types have the following characteristics:

  • Nullable types represent value-type variables that can be assigned the value of null. You cannot create a nullable type based on a reference type. (Reference types already support the null value.)

  • The syntax T? is shorthand for Nullable<(Of <(T>)>), where T is a value type. The two forms are interchangeable.

  • Assign a value to a nullable type just as you would for an ordinary value type, for example int? x = 10; or double? d = 4.108;

  • Use the Nullable<(Of <(T>)>)..::.GetValueOrDefault property to return either the assigned value, or the default value for the underlying type if the value is null, for example int j = x.GetValueOrDefault();

  • Use the HasValue and Value read-only properties to test for null and retrieve the value, for example if(x.HasValue) j = x.Value;

    • The HasValue property returns true if the variable contains a value, or false if it is null.

    • The Value property returns a value if one is assigned. Otherwise, a System..::.InvalidOperationException is thrown.

    • The default value for a nullable type variable sets HasValue to false. The Value is undefined.

  • Use the ?? operator to assign a default value that will be applied when a nullable type whose current value is null is assigned to a non-nullable type, for example int? x = null; int y = x ?? -1;

  • Nested nullable types are not allowed. The following line will not compile: Nullable<Nullable<int>> n;

Общие сведения о типах, допускающих значения null

Типы, допускающие значения null, имеют следующие характеристики.

  • Типы, допускающие значения null, представляют переменные типа значения, которым можно назначать значение null. Нельзя создать тип, допускающий значения null, на основе ссылочного типа. (Ссылочные типы уже поддерживают значение null.)

  • Синтаксис T? является краткой формой для Nullable<(Of <(T>)>), где T — это тип значения. Две эти формы взаимозаменяемы.

  • Назначение значения для типа, допускающего значения null, выполняется так же, как и для обычного типа значения, например, int? x = 10; или double? d = 4.108;

  • Используйте метод Nullable<(Of <(T>)>)..::.GetValueOrDefault для возврата назначенного значения или значения по умолчанию для базового типа, если значением является null, например int j = x.GetValueOrDefault();

  • Используйте свойства HasValue и Value, доступные только для чтения, для выполнения проверки на наличие значения null и извлечения этого значения, например if(x.HasValue) j = x.Value;

  • Свойство HasValue возвращает значение true, если переменная содержит значение, или значение false, если она пуста.

    • Свойство Value возвращает значение, если оно назначено. В противном случае создается исключение System..::.InvalidOperationException.

    • Значение по умолчанию для переменной типа, допускающего значения null, задает для HasValue значение false. Свойство Value не определено.

  • Используйте оператор ??, чтобы назначить значение по умолчанию, применяемое, когда тип, допускающий значения null, с текущим значением null, назначен типу, не допускающему значения null, например, int? x = null; int y = x ?? -1;

  • Вложенные типы, допускающие значения null, использовать нельзя. Компиляция следующей строки невозможна: Nullable<Nullable<int>> n;

Using Nullable Types

Nullable types can represent all the values of an underlying type, and an additional null value. Nullable types are declared in one of two ways:

System.Nullable<T> variable

-or-

T? variable

T is the underlying type of the nullable type. T can be any value type including struct; it cannot be a reference type.

For an example of when you might use a nullable type, consider how an ordinary Boolean variable can have two values: true and false. There is no value that signifies "undefined". In many programming applications, most notably database interactions, variables can occur in an undefined state. For example, a field in a database may contain the values true or false, but it may also contain no value at all. Similarly, reference types can be set to null to indicate that they are not initialized.

This disparity can create extra programming work, with additional variables used to store state information, the use of special values, and so on. The nullable type modifier enables C# to create value-type variables that indicate an undefined value.

Examples of Nullable Types

Any value type may be used as the basis for a nullable type. For example:

int? i = 10;

double? d1 = 3.14;

bool? flag = null;

char? letter = 'a';

int?[] arr = new int?[10];