哈哈,C#将==认为是重载的==了,这样变成了自己调用自己即递归,且没有出口当然会出堆栈溢出了。
o1.Equals(null)应该可以。

解决方案 »

  1.   

    o1本身是null值,用o1.Equals(null)岂不是要出异常?更惨的是,我也重载了Equals方法,里面就调用了“==”运算 !!!,怎么办? 先谢了!
      

  2.   

    哈哈,有趣的问题。。
    if(o1 && o2) return true;
      

  3.   

    不行吧?! o1何o2都不是bool型,怎么能用“&&”? 编译都过不去。我费老劲才找到一个办法不知行不行:用 Object.ReferenceEquals(o1, null)来分别判断o1是否为null。
    不只合适不,谢谢!
      

  4.   

    这样改吧,Equals有两个函数,静态的肯定不能override;
    public class A
    {
    private int objectID;
    public static bool operator == (A o1, A o2)
    {
    if(Object.ReferenceEquals(o1,o2)) return true; if(Object.Equals(o1, null) || Object.Equals(o2, null)) return false; if(o1.GetType() != o2.GetType() || o1.objectID != o2.objectID)
    {
    return false;
    }
    else
    {
    return true;
    }
    }
      
    public static bool operator != (A o1, A o2)
    {  return !(o1 == o2);}
    }
      

  5.   

    只有BOOLEAN的才能用&&么???
    这样呢:
    if(o1);else if(o2);else return true;
      

  6.   

    还有一种
    if( ((Object)o1)==null && ((Object)o2)==null ) return true;
      

  7.   

    to Lostinet:
    >>> 只有BOOLEAN的才能用&&么???
    好像在C#里是这样!我试了一下,好像第二种做法可以,多谢了!!
      

  8.   

    就是,怎么没想到向上造型呢!看来也用不着Object.ReferenceEquals()这样的函数了