我收到编译器警告
表达始终为假
关于此代码
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
。
这是一个错误的警告还是我错了?
Wire
是Part
答案 0 :(得分:3)
但是如果对Wire的强制转换失败并且结果为null并不意味着part也为null。
不,但反之亦然 - 如果part
为空,那么wire
肯定为空,所以您已经返回...因此警告。 (我假设您没有在中间代码中更改part
的值。)
基本上,您之前已经进行了更严格的检查 - 它有点像这样:
int value = ...;
if (value < 10)
{
return;
}
...
if (value < 0)
{
return;
}
如果value
小于0,那么它肯定小于10,所以我们不会超过第一次检查。
希望这是一个更容易理解的条件 - 然后将其应用于part
和wire
之间的关系以及它们何时可以为空值。