KoenV

Operator overloading and testing for null

Operator overloading in C# is basically writing a public static method, like this:

public static bool operator ==(CustomObject object1, CustomObject object2)
{
    return object1.SomeProperty == object2.SomeProperty;
}

Before you do this, it is necessary to check if both parameters are not null, otherwise you will get a NullReferenceException when doing this:

CustomObject object1 = GetCustomObject();
if (object1 == null)

But you cannot do the following because it will simply recurse the evaluation to the same method, and give you a StackOverflowException:

public static bool operator ==(CustomObject object1, CustomObject object2)
{
    if (object1 == null || object2 == null)
    {
        //...

Instead you can cast your parameters to "object"s before evaluating, which will use the == operator for Object:

if ((object)object1 == null || (object)object2 == null)

Also, if you don't want to repeat the whole bunch again for the != operator, you can simply write this:

public static bool operator !=(CustomObject object1, CustomObject object2)
{
    return !(object1 == object2);
}

Posted: Jan 25 2008, 12:54 AM by koevoeter | with 1 comment(s)
Filed under:

Comments

Anastasios-Antonios Toulkeridis said:

Thank you very much. I got frustrated with that stackoverflowexception. Thanks

# May 18, 2009 10:01 AM
Leave a Comment

(required) 

(required) 

(optional)

(required)