为什么比较我的两个类返回false?

2 c#

我不明白 为什么比较我的类返回false?我想.Equals检查每个元素是否相互= =并且我应该在两个类中分别对我.那么问题是什么?我如何才能做到这一点?

public class MyTest
{
    string me;
    public MyTest(){}
    public MyTest(string v) { me = v; }
    public static implicit operator string(MyTest v){return v.me;}
    public static implicit operator MyTest(string v) { return new MyTest(v); }
    public override string ToString(){ return me;}
}

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("{0}", new MyTest("a").Equals( new MyTest("a")));
        Console.WriteLine("{0}", new MyTest("a") == new MyTest("a"));
        //false, false
Run Code Online (Sandbox Code Playgroud)

Fre*_*els 14

类是引用类型.因此,默认的'Equals'方法和相等运算符比较实例的'references'(即内存地址),以验证2个实例是否相等.

换句话说:引用类型上的相等性检查2个实例是否是同一个实例.

您可以通过重写Equals和GetHashCode方法来覆盖此行为.此外,您可以重载相等和不等于运算符.


Dar*_*rov 6

您需要覆盖Equals方法,因为默认情况下,对于引用类型,它会比较它们的引用:

public override bool Equals(object obj)
{
    var other = obj as MyTest;
    if (other == null)
    {
        return false;
    }
    return other.me == me;
}
Run Code Online (Sandbox Code Playgroud)

此外,当重写Equals方法时,最好还是覆盖GetHashCode方法:

public override int GetHashCode()
{
    return (me ?? string.Empty).GetHashCode();
}
Run Code Online (Sandbox Code Playgroud)