2014-09-04 72 views
3

隨着Roslyn的推出,C#受益於安全導航運算符。 對於使用點符號的對象來說,這非常棒。索引對象的安全導航

MyClass myClass = null; 
var singleElement = myClass?.ArrayOfStrings[0]; 

在這個實例中,myClass爲null,但安全操作符將我從異常中解救出來。  

我的問題是如果你有一個索引對象是否有一個等效的安全導航操作符的實現?需要這個應該是這樣的一個例子:

var myClass2 = new MyClass { ArrayOfStrings = null }; 
var singleElement2 = myClass2?.ArrayOfStrings[0]; 

在這種情況下myClass2不爲空,但ArrayOfStrings屬性,所以當我嘗試和訪問它,它會拋出異常。由於ArrayOfStrings和索引之間沒有點符號,因此我無法添加安全導航運算符。  

因爲這是一個數組,我可以使用以下方式安全導航操作,但這並不對其他的集合,如基於它看起來像Language Feature Status Page列表和數據行

var myClass3 = new MyClass { ArrayOfStrings = null }; 
var singleElement3 = myClass3?.ArrayOfStrings?.GetValue(0); 
+1

只是添加,術語'安全導航「有點誤導,因爲操作符只從'null'對象保存。因此,名稱[空傳播運算符](https://roslyn.codeplex.com/wikipage?title=Language%20Feature%20Status&referringTitle=Documentation)。如果像'MyClass myClass = new MyClass {ArrayOfStrings = new string [2]}這樣的'IndexOutOfRangeException',這將不會保存。 var singleElement = myClass?.ArrayOfStrings?[5];' – Habib 2014-09-05 15:02:04

回答

8

工作你想:

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

頁面上的例子是:

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

......坦率地說$price部分現在已經被撤消,我相信,但我會期待索引空傳播起作用。

+0

輝煌,這正是我所期待的,謝謝。 – rh072005 2014-09-04 16:55:57