Нулевой оператор распространения/выражение условного доступа, входящее в С# -6.0 выглядит довольно удобной функцией. Но мне любопытно, поможет ли это решить проблему проверки того, является ли дочерний элемент не нулевым, а затем вызывает логический метод для указанного дочернего элемента внутри блока if:
public class Container<int>{
IEnumerable<int> Objects {get;set;}
}
public Container BuildContainer()
{
var c = new Container();
if (/* Some Random Condition */)
c.Objects = new List<int>{1,2,4};
}
public void Test()
{
var c = BuildContainer();
//Old way
if ( null != c && null != c.Objects && c.Objects.Any())
Console.Write("Container has items!");
//C# 6 way?
if (c?.Object?.Any())
Console.Write("Container has items!");
}
Будет ли c?.Object?.Any()
скомпилировать? Если короткозамкнутый оператор распространения (предположим, что правый член) равен нулю, вы имеете if (null)
, что недопустимо.
Будет ли команда С# решать эту проблему или мне не хватает предполагаемого варианта использования для пустого оператора распространения?