Типы, допускающие значение NULL (Руководство по программированию на C#)Nullable types (C# Programming Guide)

Типы, допускающие значения NULL, являются экземплярами структуры System.Nullable<T>.Nullable types are instances of the System.Nullable<T> struct. Типы, допускающие значение NULL, могут представлять все значения своего базового типа T, а также дополнительное значение NULL.Nullable types can represent all the values of an underlying type T, and an additional null value. Базовый тип T может быть любым типом значения, не допускающим значение NULL.The underlying type T can be any non-nullable value type. T не может быть ссылочным типом.T cannot be a reference type.

Например, вы можете назначить значение null или любое целое число от Int32.MinValue до Int32.MaxValue для структуры Nullable<int>, а также true, false или Nullable<bool> для null.For example, you can assign null or any integer value from Int32.MinValue to Int32.MaxValue to a Nullable<int> and true, false, or null to a Nullable<bool>.

Тип, допускающий значение NULL, следует использовать, когда нужно представить неопределенное значение его базового типа.You use a nullable type when you need to represent the undefined value of an underlying type. У логической переменной может быть только два значения: true (истина) и false (ложь).A Boolean variable can have only two values: true and false. Значение "не определено" у нее отсутствует.There is no "undefined" value. Во многих сценариях программирования, в первую очередь при взаимодействии с базами данных, значение переменной может быть неопределенным или отсутствовать.In many programming applications, most notably database interactions, a variable value can be undefined or missing. Например, поле в базе данных может содержать значение true или false, или вообще не содержать никакого значения.For example, a field in a database may contain the values true or false, or it may contain no value at all. В этом случае используйте тип Nullable<bool>.You use a Nullable<bool> type in that case.

Типы, допускающие значения NULL, имеют следующие характеристики.Nullable types have the following characteristics:

  • Типы, допускающие значение NULL, представляют переменные типа значения, которым может быть присвоено значение null.Nullable types represent value-type variables that can be assigned the null value. Нельзя создать тип, допускающий значение NULL, на основе ссылочного типа.You cannot create a nullable type based on a reference type. (Ссылочные типы всегда поддерживают значение null.)(Reference types already support the null value.)

  • Синтаксис T? является сокращением Nullable<T>.The syntax T? is shorthand for Nullable<T>. Эти две формы записи являются взаимозаменяемыми.The two forms are interchangeable.

  • Типу, допускающему значение NULL, можно присвоить значение так же, как и типу базового значения, например int? x = 10; или double? d = 4.108;.Assign a value to a nullable type just as you would for an underlying value type: int? x = 10; or double? d = 4.108;. Вы также можете присвоить значение null: int? x = null;.You also can assign the null value: int? x = null;.

  • Используйте доступные только для чтения свойства Nullable<T>.HasValue и Nullable<T>.Value для проверки на NULL и получения значения, как показано в следующем примере: if (x.HasValue) y = x.Value;Use the Nullable<T>.HasValue and Nullable<T>.Value readonly properties to test for null and retrieve the value, as shown in the following example: if (x.HasValue) y = x.Value;

    • Свойство HasValue возвращает true, если переменная содержит значение, или false, если она содержит null.The HasValue property returns true if the variable contains a value, or false if it's null.

    • Свойство Value возвращает значение, если HasValue возвращает true.The Value property returns a value if HasValue returns true. В противном случае возникает исключение InvalidOperationException.Otherwise, an InvalidOperationException is thrown.

  • Вы также можете использовать с типом, допускающим значение NULL, операторы == и !=, как показано в следующем примере: if (x != null) y = x.Value;.You can also use the == and != operators with a nullable type, as shown in the following example: if (x != null) y = x.Value;. Если a и b равны NULL, a == b дает значение true.If a and b are both null, a == b evaluates to true.

  • Начиная с версии C# 7.0, для проверки и получения значения типа, допускающего значение NULL, можно использовать сопоставление шаблонов: if (x is int valueOfX) y = valueOfX;.Beginning with C# 7.0, you can use pattern matching to both examine and get a value of a nullable type: if (x is int valueOfX) y = valueOfX;.

  • Значение по умолчанию T? является экземпляром, свойство HasValue которого возвращает false.The default value of T? is an instance whose HasValue property returns false.

  • Используйте метод GetValueOrDefault(), чтобы вернуть либо присвоенное значение, либо значение по умолчанию для типа базового значения, если значение типа, допускающего значение NULL, равно null.Use the GetValueOrDefault() method to return either the assigned value, or the default value of the underlying value type if the value of the nullable type is null.

  • Используйте метод GetValueOrDefault(T), чтобы вернуть либо присвоенное значение, либо предоставленное значение по умолчанию, если значение типа, допускающего значение NULL, равно null.Use the GetValueOrDefault(T) method to return either the assigned value, or the provided default value if the value of the nullable type is null.

  • Используйте оператор объединения со значением NULL, ??, чтобы присвоить значение базовому типу на основе значения типа, допускающего значение NULL: int? x = null; int y = x ?? -1;.Use the null-coalescing operator, ??, to assign a value to an underlying type based on a value of the nullable type: int? x = null; int y = x ?? -1;. В указанном примере, так как x равно NULL, итоговое значение y будет равно -1.In the example, since x is null, the result value of y is -1.

  • Если между двумя типами данных определено пользовательское преобразование типов, то это же преобразование можно также использовать с версиями этих типов, допускающими значение null.If a user-defined conversion is defined between two data types, the same conversion can also be used with the nullable versions of these data types.

  • Нельзя создавать вложенные типы, допускающие значение NULL.Nested nullable types are not allowed. Эта строка компилироваться не будет: Nullable<Nullable<int>> n;The following line doesn't compile: Nullable<Nullable<int>> n;

Дополнительные сведения см. в руководстве по использованию типов, допускающих значение NULL и практическом руководстве по определению типов, допускающих значение NULL.For more information, see the Using nullable types and How to: Identify a nullable type topics.

См. такжеSee also