随着Roslyn的推出,C#获得了安全导航运营商的优势。 这对于使用点符号的对象来说非常棒。
MyClass myClass = null;
var singleElement = myClass?.ArrayOfStrings[0];
在这个例子中,myClass为null,但安全操作符使我免于异常。
我的问题是,如果你有一个索引对象是否有安全导航运算符的等效实现?需要这个的一个例子如下:
var myClass2 = new MyClass { ArrayOfStrings = null };
var singleElement2 = myClass2?.ArrayOfStrings[0];
在这个例子中,myClass2不是null,而是ArrayOfStrings属性,所以当我尝试访问它时,它会抛出异常。因为ArrayOfStrings和索引之间没有点符号,所以无法添加安全导航操作符。
因为这是一个数组,我可以通过以下方式使用安全导航操作符,但这不适用于其他集合,例如Lists和DataRows
var myClass3 = new MyClass { ArrayOfStrings = null };
var singleElement3 = myClass3?.ArrayOfStrings?.GetValue(0);
答案 0 :(得分:8)
基于Language Feature Status Page看起来像你想要的那样:
var singleElement2 = myClass2?.ArrayOfStrings?[0];
页面上的示例是:
customer?.Orders?[5]?.$price
...诚然,$price
部分现在已被撤销,我相信,但我希望索引的空传播能够正常工作。