索引对象的安全导航

rh0*_*005 5 c# operators roslyn c#-6.0

随着Roslyn的推出,C#获得了安全导航运营商的优势.这对于使用点符号的对象来说非常棒

MyClass myClass = null;
var singleElement = myClass?.ArrayOfStrings[0];
Run Code Online (Sandbox Code Playgroud)

在这个例子中,myClass为null,但安全操作符使我免于异常. 

我的问题是,如果你有一个索引对象是否有安全导航运算符的等效实现?需要它的一个例子如下所示:

var myClass2 = new MyClass { ArrayOfStrings = null };
var singleElement2 = myClass2?.ArrayOfStrings[0];
Run Code Online (Sandbox Code Playgroud)

在这个例子中,myClass2不是null,而是ArrayOfStrings属性,因此当我尝试访问它时,它将抛出异常.因为ArrayOfStrings和索引之间没有点符号,所以我无法添加安全的nav操作符.  

因为这是一个数组,我可以通过以下方式使用安全导航操作符,但这不适用于其他集合,如Lists和DataRows

var myClass3 = new MyClass { ArrayOfStrings = null };
var singleElement3 = myClass3?.ArrayOfStrings?.GetValue(0);
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 9

基于语言功能状态页面,它看起来像你想要的:

var singleElement2 = myClass2?.ArrayOfStrings?[0];
Run Code Online (Sandbox Code Playgroud)

页面上的示例是:

customer?.Orders?[5]?.$price
Run Code Online (Sandbox Code Playgroud)

...不可否认,$price现在这个部分已被撤销了,我相信,但我希望索引的空传播能够正常工作.