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方法来覆盖此行为.此外,您可以重载相等和不等于运算符.
您需要覆盖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)
| 归档时间: |
|
| 查看次数: |
264 次 |
| 最近记录: |