"表达总是错误的"与AS一起投射时

时间:2015-02-18 10:38:05

标签: c# casting compiler-warnings

我收到编译器警告

  

表达始终为假

关于此代码

void Test(Part part) {
   var wire = part as Wire;    
   if (wire == null) return;

   if (part == null) {  //here I get the warning
      ....
   }
}

但如果转化为Wire失败并导致null并不意味着part也是null

这是一个错误的警告还是我错了?

WirePart

的子类

1 个答案:

答案 0 :(得分:3)

  

但是如果对Wire的强制转换失败并且结果为null并不意味着part也为null。

不,但反之亦然 - 如果part为空,那么wire 肯定为空,所以您已经返回...因此警告。 (我假设您没有在中间代码中更改part的值。)

基本上,您之前已经进行了更严格的检查 - 它有点像这样:

int value = ...;

if (value < 10)
{
    return;
}
...
if (value < 0)
{
    return;
}

如果value小于0,那么它肯定小于10,所以我们不会超过第一次检查。

希望这是一个更容易理解的条件 - 然后将其应用于partwire之间的关系以及它们何时可以为空值。