查找列表中的一个项目<通过提供一个示例对象实例

本文关键字:一个 实例 对象 项目 列表 查找 | 更新日期: 2023-09-27 18:05:32

为什么有List<T>.Contains(T)方法而没有List<T>.Find(T)方法?仅支持支持谓词的Find。如果我们有一个现有的T实例,它的ID填充了一个属性值(但缺少其他属性),为什么我们不能通过为List中的搜索提供这个对象实例来搜索,特别是当我们为T实现了自定义IEquatable<T>并希望使用那里的东西时。但事实上,我们不能,我们必须在Find(predicate)调用中重复我们在IEquatable实现中所做的一切。

查找列表中的一个项目<通过提供一个示例对象实例

可以在Predicate<T>中调用IEquatable<T>成员。这样你就不用重复了。

MyClass a = new MyClass(); //sample for finding; IEquatable<MyClass>
List<MyClass> list = GetInstances();
MyClass found = list.Find( mc => mc.Equals(a) );

这个怎么样

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

EDIT:

我想我现在明白你的问题了。您可以为此目的使用List<T>.IndexOf方法:
int index = myList.IndexOf(mySample);
if(index != -1)
{
   var item = myList[index];
   // Do something with item.
}

但这将是相当奇怪的,因为很明显,你的平等定义并不是全部——在我看来,这是对平等的滥用。