0

次のように変数を宣言しました。

bool b = (x is Foo) ? (x as Foo).Bar == 1 ? false;

しかし、resharper は式を単純化できると言ってくれたので、次のように書き直しました。

bool b = (x as Foo).Bar == 1;

Amd now resharper は満足していますが、「例外は安全」ですか? たとえば、xisnt 型の場合は false を返しますFooか?

4

3 に答える 3

4

NullReferenceException2 番目は、x が型でない場合に aをスローしますFoo

于 2012-12-10T08:38:28.097 に答える
2

最初のバージョンは 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;
于 2012-12-10T08:43:01.713 に答える
0

Resharperがこれを言う理由はわかりませんが、間違っています。

の場合と同様に、がFooでないx場合は、例外が発生します。

bool b = (x as Foo).Bar == 1; //IF X IS SOMETHING ELSE, EXCEPTION !

as演算子はキャストの実行を許可しますが、失敗した場合はを返しますnull。したがってx as Foo == null、のプロパティにアクセスするとnull例外が発生します。

于 2012-12-10T08:40:09.460 に答える