Nếu bạn không có khả năng ghi đè bằng (hoặc nếu bạn không muốn), bạn có thể triển khai IEqualityComparer<T>
đối tượng và chuyển đối tượng đó làm tham số thứ hai cho phương thức chứa (quá tải). Nếu đối tượng của bạn là một kiểu tham chiếu, nó sẽ chỉ đơn giản là so sánh các tham chiếu thay vì nội dung của đối tượng.
class Foo
{
public string Blah { get; set; }
}
class FooComparer : IEqualityComparer<Foo>
{
#region IEqualityComparer<Foo> Members
public bool Equals(Foo x, Foo y)
{
return x.Blah.Equals(y.Blah);
}
public int GetHashCode(Foo obj)
{
return obj.Blah.GetHashCode();
}
#endregion
}
...
Foo foo = new Foo() { Blah = "Apple" };
Foo foo2 = new Foo() { Blah = "Apple" };
List<Foo> foos = new List<Foo>();
foos.Add(foo);
if (!foos.Contains(foo2, new FooComparer()))
foos.Add(foo2);
Trong kịch bản này, foo2 sẽ không được thêm vào danh sách. Nó sẽ không có đối số so sánh.
Nguồn
2010-03-31 20:29:07
Bạn cần hiển thị cho chúng tôi mã của phương thức Chứa. – Timores
@Timores: Chứa() là một phương thức trên Danh sách. –