Новый оператор с нулевым условием С# 6.0 - удобный инструмент для написания более сжатого и менее сложного кода. Предполагая, что у одного есть массив клиентов, тогда вы можете получить null вместо длины, если customers
имеет значение null, используя это (примеры из MSDN):
int? length = customers?.Length;
Аналогично вы можете получить null вместо клиента с этим:
Customer first = customers?[0];
И для более сложного выражения это дает null, если customers
равно null, первый клиент имеет значение null, или первый клиент Orders
объект имеет значение null:
int? count = customers?[0]?.Orders?.Count();
Но тогда есть интересный случай несуществующего клиента, который, по-видимому, не выполняет оператор с нулевым условием. Мы видели выше, что пустой клиент покрыт, то есть если запись в массиве customers
равна нулю. Но это совершенно отличается от несуществующего клиента, например. ищет клиента 5
в 3-элементном массиве или клиенте n
в списке из 0 элементов. (Обратите внимание, что это же обсуждение относится и к поиску словаря.)
Мне кажется, что оператор с нулевым условием сосредоточен исключительно на отрицании эффектов исключения NullReferenceException; IndexOutOfRangeException или KeyNotFoundException - одни, разоблачены, сжимаются в углу и нуждаются в том, чтобы сами себя заботиться! Я утверждаю, что в духе оператора с нулевым условием он должен также иметь возможность обрабатывать эти случаи..., что приводит к моему вопросу.
Я пропустил это? Предоставляет ли нуль-условность какой-либо элегантный способ по-настоящему покрыть это выражение...
customers?[0]?.Orders?.Count();
... когда нет нулевого элемента?