2012-04-16 12 views
1

C#にgroovyの安全なナビゲーション演算子のように動作する演算子がありますか?セーフナビゲーションオペレータの最適な実装は何ですか

たとえば、Groovyでこのようなことをすると、SessionData.CurrentSeminarがnullの場合、NullPointerExceptionが発生しなくなります。

int respId = SessionData.CurrentSeminar?.SeminCbaRespId; 

これはどのようにC#で達成できますか?

+0

を。ヌルか0か? –

答えて

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

+0

http://connect.microsoft.com/VisualStudio/feedback/details/192177/a-bit-more-c-syntactic-sugar-for-nulls –

+0

何も完璧ではありません。 –

0

このような回避策はありますか?

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

これのための演算子はありませんが、閉じることができます。 this answerから1を試してみてください。

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

最も近いオペレータが?:ですが、それは甘いようではありません。
だから、あなたは何ができる:CurrentSeminarがnullの場合必要な値あなたが言及していない

int respId = SessionData.CurrentSeminar != null ? SessionData.CurrentSeminar.SeminCbaRespId : 0; // if 0 is the "null" value 
関連する問題