"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
。
这是一个错误的警告还是我错了?
Wire
是 Part
的子类
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,所以我们不会通过第一次检查。
希望这是一个更容易理解的条件 - 然后将其应用于 part
和 wire
之间的关系以及它们何时可以具有空值。
我收到编译器警告
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
。
这是一个错误的警告还是我错了?
Wire
是 Part
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,所以我们不会通过第一次检查。
希望这是一个更容易理解的条件 - 然后将其应用于 part
和 wire
之间的关系以及它们何时可以具有空值。