比较2个对象而不是引用

时间:2015-07-22 18:41:04

标签: c#

我有一个比较2个通用对象的方法(它需要保留对象,因为这个方法必须是通用的)。当我用==或.Equals比较对象时,我得到一个假。但是当我在当时输入对象到我已知的类型时,我得到了真实。我唯一的解释是它是比较引用或指针,它们不相同,但对象是。

    private static bool AreSame(object a, object b)
    {
        bool equalsResult = a.Equals(b);
        bool compareResult = a == b;
        bool castingResult = (a as MyClass).Equals(b as MyClass);
    }

如果不知道预编译我将要比较的类或对象,我该如何解决这个问题呢?

1 个答案:

答案 0 :(得分:2)

只有在Equals重载的行为与从Equals(object)继承的Object方法不同的情况下才会发生此行为,例如

public class MyClass
{
    public bool Equals(MyClass c) { ... }
}

在这种情况下,您应该实施IEquatable<MyClass>并覆盖Object.Equals以使用它:

public class MyClass : IEquatable<MyClass>
{
    public bool Equals(MyClass c) { ... }
    public override bool Equals(object o)
    { 
        var c = o as MyClass;
        return c != null && Equals(c);
    }
}

然后您可以使用现有方法或通用方法:

private static bool AreSame<T>(T a, T b) where T : IEquatable<T>
{
    return EqualityComparer<T>.Default.Equals(a, b);
}