覆盖.NET通用列表<MyType> .Contains(MyTypeInstance)?

Jör*_*ann 7 .net c# list

是否有可能,如果是这样我怎么重写Contains其他正常的方法List<T>,在这里T是我自己的,自定义类型?

Mar*_*ell 7

List<T>EqualityComparer<T>.Default做比较; 这首先检查你的对象是否实现IEquatable<T>; 否则是用途object.Equals.

所以; 最简单的方法是覆盖Equals(始终更新GetHashCode以匹配逻辑Equals).或者,使用LINQ代替:

bool hasValue = list.Any(x => x.Foo == someValue);
Run Code Online (Sandbox Code Playgroud)


Pet*_*old 5

要创建自己的Contains实现,您可以创建一个实现IList接口的类.这样你的课就会像IList一样.你可以在内部有一个真正的List来做标准的东西.

class MyTypeList : IList<MyType>
{
    private List<MyType> internalList = new ...;

    public bool Contains(MyType instance)
    {

    }

    ....
}
Run Code Online (Sandbox Code Playgroud)