索引对象的安全导航

时间:2014-09-04 16:47:56

标签: c# operators roslyn c#-6.0

随着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);

1 个答案:

答案 0 :(得分:8)

基于Language Feature Status Page看起来像你想要的那样:

var singleElement2 = myClass2?.ArrayOfStrings?[0];

页面上的示例是:

customer?.Orders?[5]?.$price

...诚然,$price部分现在已被撤销,我相信,但我希望索引的空传播能够正常工作。