c# "==" operator : compiler behaviour with different structs
- by Moe Sisko
Code to illustrate :
    public struct MyStruct
    {
        public int SomeNumber;
    }
    public string DoSomethingWithMyStruct(MyStruct s)
    {
        if (s == null)
            return "this can't happen";
        else
            return "ok";
    }
    private string DoSomethingWithDateTime(DateTime s)
    {
        if (s == null)
            return "this can't happen";  // XX
        else
            return "ok";
    }
Now, "DoSomethingWithStruct" fails to compile with : "Operator '==' cannot be applied to operands of type 'MyStruct' and '<null>'". This makes sense, since it doesn't make sense to try a reference comparison with a struct, which is a value type.
OTOH, "DoSomethingWithDateTime" compiles, but with compiler warning : "Unreachable code detected" at line marked "XX". Now, I'm assuming that there is no compiler error here, because the DateTime struct overloads the "==" operator. But how does the compiler know that the code is unreachable ? e.g. Does it look inside the code which overloads the "==" operator ? (This is using Visual Studio 2005 in case that makes a difference).
Note : I'm more curious than anything about the above. I don't usually try to use "==" on structs and nulls.