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
http://connect.microsoft.com/VisualStudio/feedback/details/192177/a-bit-more-c-syntactic-sugar-for-nulls –
何も完璧ではありません。 –
このような回避策はありますか?
int respId= ReferenceEquals(SessionData.CurrentSeminar,null)?-1:SessionData.CurrentSeminar.SeminCbaRespId;
これのための演算子はありませんが、閉じることができます。 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");
最も近いオペレータが?:
ですが、それは甘いようではありません。
だから、あなたは何ができる:CurrentSeminarがnullの場合必要な値あなたが言及していない
int respId = SessionData.CurrentSeminar != null ? SessionData.CurrentSeminar.SeminCbaRespId : 0; // if 0 is the "null" value
を。ヌルか0か? –