如果bool简化简写

时间:2012-12-10 08:36:12

标签: c# .net

我刚刚声明了一个这样的变量:

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

但是,resharper告诉我,我可以简化表达,所以我重写了这样:

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

Amd现在resharper很满意,但是“异常安全”?例如,如果x不属于Foo类型,则会返回false吗?

3 个答案:

答案 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的属性会引发异常。