Оператор ?.
Оператор ?. ставят между выражением и
именем члена или методом. Если слева null,
цепочка не выполняется и результат всей
операции - null. Для string?
выражение str?.Length имеет тип int?,
потому что длина может отсутствовать. В коде
ниже включён #nullable enable.
Синтаксис
выражение?.член
выражение?.Метод()
Пример
Давайте прочитаем Length у непустой строки:
#nullable enable
using System;
class Program
{
static void Main()
{
string? str = "abcde";
int? len = str?.Length;
Console.WriteLine(len);
}
}
Результат выполнения кода:
5
Пример
Давайте обратимся к Length, когда строка null:
#nullable enable
using System;
class Program
{
static void Main()
{
string? str = null;
int? len = str?.Length;
Console.WriteLine(len is null);
}
}
Результат выполнения кода:
True
Пример
Давайте вызовем ToUpper через ?.
и подставим запасное через ??:
#nullable enable
using System;
class Program
{
static void Main()
{
string? str = null;
string res = str?.ToUpper() ?? "abcde";
Console.WriteLine(res);
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте построим цепочку из нескольких ?.:
#nullable enable
using System;
class Program
{
static void Main()
{
string? str = "abcde";
int? len = str?.Trim()?.Length;
Console.WriteLine(len);
}
}
Результат выполнения кода:
5