c# "==" operator : compiler behaviour with different structs

Posted by Moe Sisko on Stack Overflow See other posts from Stack Overflow or by Moe Sisko
Published on 2010-04-19T05:38:33Z Indexed on 2010/04/19 5:43 UTC
Read the original article Hit count: 266

Filed under:
|

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.

© Stack Overflow or respective owner

Related posts about c#

Related posts about .NET