I get the compiler warning
Expression is always false
on this code
void Test(Part part) {
var wire = part as Wire;
if (wire == null) return;
if (part == null) { //here I get the warning
....
}
}
But if the cast to Wire fails and results in null does not mean part is null too.
Is this a wrong warning or am I wrong?
Wire is a subclass of Part

But if the cast to Wire fails and results in null does not mean part is null too.
No, but the reverse is true - if part is null, then wire will definitely be null, so you'll already have returned... hence the warning. (I'm assuming you don't change the value of part in the intervening code.)
Basically, you've got a stricter check earlier - it's a bit like this:
int value = ...;
if (value < 10)
{
return;
}
...
if (value < 0)
{
return;
}
If value is less than 0, then it's definitely less than 10, so we won't get past the first check.
Hopefully that's a simpler condition to understand - then apply that to the relationship between part and wire and when they can have null values.
See more on this question at Stackoverflow