我刚刚声明了一个这样的变量:
bool b = (x is Foo) ? (x as Foo).Bar == 1 ? false;
但是,resharper告诉我,我可以简化表达,所以我重写了这样:
bool b = (x as Foo).Bar == 1;
Amd现在resharper很满意,但是“异常安全”?例如,如果x
不属于Foo
类型,则会返回false吗?
答案 0 :(得分:4)
如果x不是NullReferenceException
Foo
答案 1 :(得分: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;
答案 2 :(得分:0)
不知道为什么 Resharper 告诉这个,但是错了。
在这种情况下,当x
不 Foo时,它会引发异常。
bool b = (x as Foo).Bar == 1; //IF X IS SOMETHING ELSE, EXCEPTION !
as as运算符允许运行强制转换,但如果失败,则返回null
。
因此,x as Foo == null
和访问null
的属性会引发异常。