Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Nullable-типы в C#: безопасная работа со значениями null

Что такое nullable-типы

Nullable-типы (nullable value types) позволяют значимым типам (value types) принимать значение null в дополнение к своим обычным значениям. Обычные значимые типы (int, bool, double, структуры) не могут быть null.

Синтаксис

<тип>? <имя_переменной> = null;
// или
Nullable<<тип>> <имя_переменной> = null;

T? — это сокращение для Nullable<T>, где T — значимый тип.

Примеры объявления

int? num1 = null;
int? num2 = 45;
double? num3 = new double?(); // null
double? num4 = 3.14157;
bool? boolVal = new bool?(); // null
bool? flag = true;

Свойства Nullable<T>

СвойствоОписание
HasValuetrue, если значение не null
ValueВозвращает значение (бросает исключение, если HasValue == false)
int? x = 5;
if (x.HasValue) Console.WriteLine(x.Value); // 5

int? y = null;
Console.WriteLine(y.HasValue); // False
// Console.WriteLine(y.Value); // InvalidOperationException

Оператор null-коалесценции (??)

Возвращает левый операнд, если он не null; иначе — правый.

double? num1 = null;
double? num2 = 3.14157;

double num3 = num1 ?? 5.34;   // 5.34 (num1 == null)
double num4 = num2 ?? 5.34;   // 3.14157 (num2 != null)

Также работает с ссылочными типами: string s = null ?? "default"; // "default"

Оператор ??= (C# 8.0+) — присваивание при null

string? name = null;
name ??= "Аноним"; // name становится "Аноним"
name ??= "Другой"; // не изменится, уже не null

Оператор ?. (null-conditional) — безопасный доступ

string? text = null;
int? length = text?.Length; // null, без исключения

// Цепочка:
var city = person?.Address?.City?.ToUpper();

Упаковка (boxing) nullable-типов

int? x = 42;
object o = x; // упаковка int (не Nullable<int>)
Console.WriteLine(o.GetType()); // System.Int32

int? y = null;
object o2 = y; // упаковка null
Console.WriteLine(o2 == null); // True

Nullable-типы и операторы

Nullable-контекст (C# 8.0+)

Включается в проекте (<Nullable>enable</Nullable>) или директивой #nullable enable. Компилятор выдаёт предупреждения при возможном разыменовании null для ссылочных типов.

#nullable enable
string? maybeNull = null;
string notNull = "text";
// maybeNull.Length; // Warning!
// notNull.Length;   // OK

Язык C

  1. Освоение Java 8 Optional: Практическое руководство по коду, безопасному для null
  2. Атрибуты в C#: метаданные, предопределённые и пользовательские атрибуты
  3. Ferro-Titanit® Cromoni — высокопрочный неметаллический титановый сплав
  4. Сплав AgCu20: Механические, тепловые и электрические свойства при 23 °C
  5. Сплав 15CDV6 (DIN 1.7734): Высокая прочность, вязкость и легкая сварка
  6. Сплав DIN 1.7734 (15CDV6): Высокая прочность, вязкость и свариваемость
  7. Сплав 15CDV6 (DIN 1.7734): Высокая прочность, легкая сварка, превосходная вязкость
  8. Сплав PtNi10 – Комплексные механические и тепловые свойства
  9. Сплав PtIr10 платина-иридий: высокопрочный материал для высоких температур
  10. Лист Corroplast – Коррозионно-стойкая сталь для точной обработки и формообразования