1

groovyの安全なナビゲーションオペレーターのように動作するC#のオペレーターはありますか?

たとえば、groovyでは、このようなことを行うと、SessionData.CurrentSeminarがnullの場合にNullPointerExceptionが発生するのを防ぐことができます。

int respId = SessionData.CurrentSeminar?.SeminCbaRespId;

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

4

4 に答える 4

1

その演算子は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);
}
于 2012-04-16T13:02:01.997 に答える
0

多分このような回避策?

int respId= ReferenceEquals(SessionData.CurrentSeminar,null)?-1:SessionData.CurrentSeminar.SeminCbaRespId;
于 2012-04-16T13:04:49.393 に答える
0

このための演算子はありませんが、近づくことができます。この答えから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");
于 2012-04-16T13:05:00.457 に答える
0

最も近い演算子はですが?:、それほど甘くはありません。
だから、あなたはすることができます:

int respId = SessionData.CurrentSeminar != null ? SessionData.CurrentSeminar.SeminCbaRespId : 0; // if 0 is the "null" value 
于 2012-04-16T13:05:08.270 に答える