在C#中是否有一個運算符像Groovy中的安全導航運算符那樣?安全導航運算符的最佳實現是什麼
例如,在groovy中,如果SessionData.CurrentSeminar爲null,則執行此類操作將防止它發生NullPointerException。
int respId = SessionData.CurrentSeminar?.SeminCbaRespId;
這是如何用C#完成的?
在C#中是否有一個運算符像Groovy中的安全導航運算符那樣?安全導航運算符的最佳實現是什麼
例如,在groovy中,如果SessionData.CurrentSeminar爲null,則執行此類操作將防止它發生NullPointerException。
int respId = SessionData.CurrentSeminar?.SeminCbaRespId;
這是如何用C#完成的?
該運算符在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);
}
這似乎是一個很好的解決方法,謝謝。我們厭倦了C#中不存在這樣一個完美的運算符。 – kbaccouche 2012-04-16 13:10:29
http://connect.microsoft.com/VisualStudio/feedback/details/192177/a-bit-more-c-syntactic-sugar-for-nulls – 2012-04-16 13:11:47
並沒有什麼是完美的。 – 2012-04-16 13:12:53
也許這樣的解決方法?
int respId= ReferenceEquals(SessionData.CurrentSeminar,null)?-1:SessionData.CurrentSeminar.SeminCbaRespId;
這裏沒有操作員,但可以關閉。嘗試從一個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");
最接近的運營商?:
,但它不是含糖。
所以,你可以這樣做:
int respId = SessionData.CurrentSeminar != null ? SessionData.CurrentSeminar.SeminCbaRespId : 0; // if 0 is the "null" value
你沒有提到你想,如果CurrentSeminar爲null,該值。你想要null還是0? – 2012-04-16 13:10:53