2012-04-16 126 views
1

在C#中是否有一個運算符像Groovy中的安全導航運算符那樣?安全導航運算符的最佳實現是什麼

例如,在groovy中,如果SessionData.CurrentSeminar爲null,則執行此類操作將防止它發生NullPointerException。

int respId = SessionData.CurrentSeminar?.SeminCbaRespId; 

這是如何用C#完成的?

+0

你沒有提到你想,如果CurrentSeminar爲null,該值。你想要null還是0? – 2012-04-16 13:10:53

回答

1

該運算符在C#中不存在。你可以用內聯的方式做 - 如果

int respId = SessionData.CurrentSeminar != null ? 
    SessionData.CurrentSeminar.SeminCbaRespId : default(int); 

或作爲擴展方法。

var respId = SessionData.CurrentSeminar.GetSeminCbaRespId(); 

public static int GetSeminCbaRespId(this typeofCurrentSeminar CurrentSeminar) 
{ 
    return CurrentSeminar != null ? CurrentSeminar.SeminCbaRespId : default(int); 
} 
+0

這似乎是一個很好的解決方法,謝謝。我們厭倦了C#中不存在這樣一個完美的運算符。 – kbaccouche 2012-04-16 13:10:29

+0

http://connect.microsoft.com/VisualStudio/feedback/details/192177/a-bit-more-c-syntactic-sugar-for-nulls – 2012-04-16 13:11:47

+0

並沒有什麼是完美的。 – 2012-04-16 13:12:53

0

也許這樣的解決方法?

int respId= ReferenceEquals(SessionData.CurrentSeminar,null)?-1:SessionData.CurrentSeminar.SeminCbaRespId; 
0

這裏沒有操作員,但可以關閉。嘗試從一個this answer

int respId = SessionData.CurrentSeminar.NullOr(s => s.SeminCbaRespId) ?? 0; 

這得到,如果你需要幾個連鎖它們額外有用:

var elem = xml.Element("abc") 
    .NullOr(x => x.Element("def")) 
    .NullOr(x => x.Element("blah"); 
0

最接近的運營商?:,但它不是含糖。
所以,你可以這樣做:

int respId = SessionData.CurrentSeminar != null ? SessionData.CurrentSeminar.SeminCbaRespId : 0; // if 0 is the "null" value 
相關問題