是否有可能,如果可以的话,我该如何覆盖一个普通的List<T>
的Contains
方法,其中T
是我的自定义类型?
是否有可能,如果可以的话,我该如何覆盖一个普通的List<T>
的Contains
方法,其中T
是我的自定义类型?
List<T>
使用 EqualityComparer<T>.Default
进行比较;这首先检查您的对象是否实现了 IEquatable<T>
;否则,它将使用 object.Equals
。
因此,最简单的方法是重写 Equals
(始终更新 GetHashCode
以匹配 Equals
中的逻辑)。或者,使用 LINQ:
bool hasValue = list.Any(x => x.Foo == someValue);
class MyTypeList : IList<MyType>
{
private List<MyType> internalList = new ...;
public bool Contains(MyType instance)
{
}
....
}
你需要在你的类(MyType
)中重写Equals
和GetHashCode
方法。
list.Any(x => x.Name.Equals("asdas", .....)) // whatever comparison you need
然后,您可以将其包装在扩展方法中以提高方便性。