为什么有List<T>.Contains(T)
方法却没有List<T>.Find(T)
方法?仅Find
支持支持谓词的 s。如果我们有一个现有的 T 实例填充了它的 ID 的属性值(但缺少其他属性)为什么我们不能通过提供这个对象实例来搜索 in 进行搜索List
,特别是当我们已经实现自定义IEquatable<T>
并T
希望使用什么东西在那里。但事实上,我们不能,我们必须在调用中重复我们在IEquatable
实现中所做的一切。Find(predicate)
问问题
11817 次
3 回答
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) );
于 2011-08-15T14:40:30.433 回答
1
这个怎么样
list.Any(i => i.ID == searchObj.ID);
于 2011-08-15T14:40:56.220 回答
1
编辑:
我想我现在明白了你的问题。您可以List<T>.IndexOf
为此目的使用该方法:
int index = myList.IndexOf(mySample);
if(index != -1)
{
var item = myList[index];
// Do something with item.
}
但这会很奇怪,因为很明显,你的平等定义并不是全部 - 这有点滥用平等,IMO。
于 2011-08-15T14:42:27.793 回答