"Expression is always false" 使用 AS 投射时

"Expression is always false" when casting with AS

我收到编译器警告

Expression is always false

在此代码上

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

的子类

But if the cast to Wire fails and results in null does not mean part is null too.

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

基本上,你之前有严格的检查——有点像这样:

int value = ...;

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

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

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