次のように変数を宣言しました。
bool b = (x is Foo) ? (x as Foo).Bar == 1 ? false;
しかし、resharper は式を単純化できると言ってくれたので、次のように書き直しました。
bool b = (x as Foo).Bar == 1;
Amd now resharper は満足していますが、「例外は安全」ですか? たとえば、x
isnt 型の場合は false を返しますFoo
か?
NullReferenceException
2 番目は、x が型でない場合に aをスローしますFoo
最初のバージョンは 2 回キャストするため、Resharper は不平を言っていると思います。これは一度だけキャストします:
Foo xAsFoo = x as Foo;
bool b = (xAsFoo != null) ? xAsFoo.Bar == 1 : false;
または短い:
Foo xAsFoo = x as Foo;
bool b = (xAsFoo != null) && xAsFoo.Bar == 1;
Resharperがこれを言う理由はわかりませんが、間違っています。
の場合と同様に、がFooでないx
場合は、例外が発生します。
bool b = (x as Foo).Bar == 1; //IF X IS SOMETHING ELSE, EXCEPTION !
as演算子はキャストの実行を許可しますが、失敗した場合はを返しますnull
。したがってx as Foo == null
、のプロパティにアクセスするとnull
例外が発生します。