我刚刚声明了一个这样的变量:
bool b = (x is Foo) ? (x as Foo).Bar == 1 ? false;
但是 resharper 告诉我,我可以简化表达式,所以我将它改写成这样:
bool b = (x as Foo).Bar == 1;
AMD 现在 resharper 很满意,但是“异常安全”吗?例如,如果x
不是 type ,它会返回 falseFoo
吗?
NullReferenceException
如果 x 不是该类型,第二个将抛出 aFoo
我认为 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会这么说,但它是错误的。
与这种情况一样,当x
不是Foo 时,它会引发异常。
bool b = (x as Foo).Bar == 1; //IF X IS SOMETHING ELSE, EXCEPTION !
as 运算符允许运行强制转换,但如果失败,则返回null
. 所以x as Foo == null
, 并且访问属性 ofnull
将引发异常。