C#重载操作符==和!=时注意问题

来源:互联网 发布:手机上清除数据 编辑:程序博客网 时间:2024/06/08 10:11

public class MyClass{public int ID;    /*public static bool operator ==(MyClass c1, MyClass c2)    {        //下面这段代码中的“==”调用会进入递归,直至崩溃        if (c1 == null || c2 == null)        {            return c1 == c2;        }        return c1.ID == c2.ID;    }    public static bool operator !=(MyClass c1, MyClass c2)    {        //下面这段代码中的“==”调用会进入递归,直至崩溃        if (c1 == null || c2 == null)        {            return c1 != c2;        }        return c1.ID != c2.ID;    }*/        //正确的方法    public static bool operator ==(MyClass c1, MyClass c2)    {        //将c1对象转为object再进行判断        //这里的object.Equals(c1, null)也可以写成        //c1 as object == null        if (object.Equals(c1, null) || object.Equals(c2, null))        {            return object.Equals(c1, c2);        }        return c1.ID == c2.ID;    }    public static bool operator !=(MyClass c1, MyClass c2)    {        if (object.Equals(c1, null) || object.Equals(c2, null))        {            return !object.Equals(c1, c2);        }        return c1.ID != c2.ID;    }}

参考:http://www.cnblogs.com/cruisoring/archive/2009/11/04/1595958.html