Описание тега null-propagation-operator
Оператор распространения значений NULL, представленный в C# 6.0, устраняет необходимость в нескольких проверках NULL в цепочке вызовов методов.
Оператор нулевого распространения был представлен в C# 6.0.
Это устраняет необходимость в нескольких проверках на null в цепочке вызовов методов, возвращая null
когда вызываемый объект null
вместо вызова целевого метода (или доступа к целевому свойству) и выдачи NullReferenceException
.
string name = null;
int? nameLength = name?.Length; // stores null in nameLength
Преимущество становится более очевидным при работе с длинными цепочками вызовов.
Представьте себе серию простых классов, определенных следующим образом:
public class ClassRoom
{
public List<Student> Students { get; set; }
}
public class Student
{
public List<Subject> Subjects { get; set; }
}
public class Subject
{
public string Name { get; set; }
}
Безопасный доступ к длине имени субъекта, если только ему предоставлено ClassRoom
, требует несколько длинного и повторяющегося кода:
int? nameLength = null;
if (c != null
&& c.Students != null
&& c.Students.Count > 0
&& c.Students[0].Subjects != null
&& c.Students[0].Subjects.Count > 0
&& c.Students[0].Subjects[0].Name != null)
{
nameLength = c.Students[0].Subjects[0].Name.Length;
}
Тот же код, переписанный с использованием оператора нулевого распространения:
int? nameLength = c?.Students?[0].Subjects?[0].Name?.Length;