.net – LinkedList.Contains.用于比较对象的方法是什么?
发布时间:2020-12-15 08:31:23 所属栏目:Java 来源:网络整理
导读:LinkedList.Contains方法. (.NET 2) 如何在里面比较对象? (等于?CompareTo?) MSDN对此一无所知. 情况: interface IClass{ string GetName();}class Class1 : IClass,IEquatableClass1{ public string FirstName; public string LastName; string IClass.
LinkedList.Contains方法. (.NET 2)
如何在里面比较对象? (等于?CompareTo?) MSDN对此一无所知. 情况: interface IClass { string GetName(); } class Class1 : IClass,IEquatable<Class1> { public string FirstName; public string LastName; string IClass.GetName() { return FirstName; } bool IEquatable<Class1>.Equals(Class1 other) { return FirstName.Equals(other.FirstName); } } class Class2 : IClass,IEquatable<Class2> { public string FirstName; public string LastName; string IClass.GetName() { return LastName; } bool IEquatable<Class2>.Equals(Class2 other) { return LastName.Equals(other.LastName); } } public void TestMethod() { Class1 c1 = new Class1(); c1.FirstName = "fn"; c1.FirstName = "ln"; Class2 c2 = new Class2(); c2.FirstName = "fn"; c2.FirstName = "ln"; Class1 c3 = new Class1(); c3.FirstName = "fn"; c3.FirstName = "ln"; LinkedList<IClass> myList = new LinkedList<IClass>(); myList.AddFirst(c1); myList.AddFirst(c2); // false here MessageBox.Show("myList<IClass> contains c3? - " + (myList.Contains(c3))); LinkedList<Class1> myList1 = new LinkedList<Class1>(); myList1.AddFirst(c1); myList1.AddFirst(c1); // true here MessageBox.Show("myList1<Class1> contains c3? - " + (myList1.Contains(c3))); } 解决方法
由于链表不是字典,我希望它使用EqualityComparer< T> .Default.Equals(x,y).
这支持(按顺序): > IEquatable< T> (对于有问题的T) 注意EqualityComparer< T>还处理这两个类和Nullable< T>的常用空规则等. (更新:检查,更正;来自Find(T)) ... EqualityComparer<T> comparer = EqualityComparer<T>.Default; ... if (comparer.Equals(head.item,value)) {...} ... 更新以证明这在ISomeInterface:IEquatable< ISomeInterface> ;,根据评论: using System; using System.Collections.Generic; class Program { static void Main() { LinkedList<IFoo> foos = new LinkedList<IFoo>(); foos.AddLast(new Foo1("abc")); foos.AddLast(new Foo2("def")); Console.WriteLine("checking contains..."); bool c = foos.Contains(new Foo1("ghi")); Console.WriteLine("...done"); } } interface IFoo : IEquatable<IFoo> { void Bar(); } class Foo1 : IFoo { public string Value { get; set; } public Foo1(string value) { Value = value; } public override bool Equals(object other) { Console.WriteLine(Value + " > override Equals"); return base.Equals(other); } bool IEquatable<IFoo>.Equals(IFoo other) { Console.WriteLine(Value + " > explicit Equals"); return base.Equals(other); } public void Bar() { } public override int GetHashCode() { return base.GetHashCode(); } } class Foo2 : IFoo { public string Value { get; set; } public Foo2(string value) { Value = value; } public override bool Equals(object other) { Console.WriteLine(Value + " > override Equals"); return base.Equals(other); } public bool Equals(IFoo other) { Console.WriteLine(Value + " > implicit Equals"); return base.Equals(other); } public void Bar() { } public override int GetHashCode() { return base.GetHashCode(); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容