繁体   English   中英

覆盖.NET通用列表 <MyType> 。载有(MyTypeInstance)?

[英]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 )中重写EqualsGetHashCode

根据您在覆盖中的具体需求,您可以使用Linq表达式来执行此操作:

list.Any(x => x.Name.Equals("asdas", .....)) // whatever comparison you need

然后,您可以将其包装在扩展方法中以方便使用。

如果实现自定义类型的equals,则List的contains函数将起作用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM