Я только что обновился с VS 2010 до 2015 года. Мне нравится новый оператор с нулевым условием, который также известен как нулевое распространение, Это позволяет упростить код, например:
string firstCustomerName = customers?[0].Name; // null if customers or the first customer is null
другой:
int? count = customers?[0]?.Orders?.Count(); // null if customers, the first customer, or Orders is null
который возвращает Nullable<int>, даже если Enumerable.Count возвращает int, чтобы разделить действительный счетчик и любой nulls раньше. Это довольно интуитивно и очень полезно.
Но зачем это компилируется и работает как ожидалось (он возвращает false):
string text = null;
bool contains = text?.IndexOf("Foo", StringComparison.CurrentCultureIgnoreCase) >= 0;
Он должен либо вернуть bool? (которого он не делает), либо не компилировать.