通过提供示例对象实例</t>在List <t>中查找项目

时间:2011-08-15 14:36:40

标签: c# list icollection iequatable

为什么有List<T>.Contains(T)方法但没有List<T>.Find(T)方法?仅支持支持谓词的Find。如果我们有一个现有的T实例,其中填充了其ID的属性值(但缺少其他属性),为什么我们无法通过在List中向搜索提供此对象实例进行搜索,尤其是当我们实现了自定义{ {1}} IEquatable<T>并希望使用那里的内容。但事实上,我们不能,我们必须重复我们在T调用中IEquatable实施中所做的一切。

3 个答案:

答案 0 :(得分:10)

您可以致电IEquatable<T>中的Predicate<T>成员。那你就不会重复自己了。

MyClass a = new MyClass(); //sample for finding; IEquatable<MyClass>
List<MyClass> list = GetInstances();

MyClass found = list.Find( mc => mc.Equals(a) );

答案 1 :(得分:1)

这个怎么样

list.Any(i => i.ID == searchObj.ID);

答案 2 :(得分:1)

编辑:

我想我现在明白你的问题。您可以使用List<T>.IndexOf方法实现此目的:

int index = myList.IndexOf(mySample);

if(index != -1)
{
   var item = myList[index];
   // Do something with item.
}

但这很奇怪,因为很明显,你的平等定义并不是全部 - 它有点滥用平等,IMO。