我Contains()用来识别列表中不包含的内容.所以,像,
if(!list.Contains(MyObject))
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
但是,即使MyObject已经在列表中,整个if语句也会变为true .
如果您没有能力重写 Equals(或者您只是不想),则可以实现IEqualityComparer<T>您的对象并将其作为第二个参数传递给 Contains 方法(重载)。如果您的对象是引用类型,则它只会比较引用而不是对象的内容。
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
}
Run Code Online (Sandbox Code Playgroud)
...
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);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,foo2 不会被添加到列表中。没有比较器参数就可以了。
| 归档时间: |
|
| 查看次数: |
1879 次 |
| 最近记录: |