groovyの安全なナビゲーションオペレーターのように動作するC#のオペレーターはありますか?
たとえば、groovyでは、このようなことを行うと、SessionData.CurrentSeminarがnullの場合にNullPointerExceptionが発生するのを防ぐことができます。
int respId = SessionData.CurrentSeminar?.SeminCbaRespId;
これはC#でどのように達成されますか?
groovyの安全なナビゲーションオペレーターのように動作するC#のオペレーターはありますか?
たとえば、groovyでは、このようなことを行うと、SessionData.CurrentSeminarがnullの場合にNullPointerExceptionが発生するのを防ぐことができます。
int respId = SessionData.CurrentSeminar?.SeminCbaRespId;
これはC#でどのように達成されますか?
その演算子はC#には存在しません。インラインでそれを行うことができます-if
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);
}
多分このような回避策?
int respId= ReferenceEquals(SessionData.CurrentSeminar,null)?-1:SessionData.CurrentSeminar.SeminCbaRespId;
このための演算子はありませんが、近づくことができます。この答えから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");
最も近い演算子はですが?:
、それほど甘くはありません。
だから、あなたはすることができます:
int respId = SessionData.CurrentSeminar != null ? SessionData.CurrentSeminar.SeminCbaRespId : 0; // if 0 is the "null" value