[英]Override .NET Generic List<MyType>.Contains(MyTypeInstance)?
是否可能,如果是这样,我如何覆盖正常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);
要创建自己的Contains实现,您可以创建一个实现IList接口的类。 这样你的课就会像IList一样。 你可以在内部有一个真正的List来做标准的东西。
class MyTypeList : IList<MyType>
{
private List<MyType> internalList = new ...;
public bool Contains(MyType instance)
{
}
....
}
您需要在类( MyType
)中重写Equals
和GetHashCode
。
根据您在覆盖中的具体需求,您可以使用Linq表达式来执行此操作:
list.Any(x => x.Name.Equals("asdas", .....)) // whatever comparison you need
然后,您可以将其包装在扩展方法中以方便使用。
如果实现自定义类型的equals,则List的contains函数将起作用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.