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

发布于 2024-11-29 12:28:56 字数 360 浏览 1 评论 0原文

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

Why is there a List<T>.Contains(T) method but no List<T>.Find(T) method? Only the Finds that support predicates are supported. If we have an existing instance of T populated with a property value for its ID (but missing other properties) why can't we search by providing this object instance to the search in List, especially when we have implemented custom IEquatable<T> for T and would like to use what's there. But as it is, we can't, we have to repeat everything that we did in IEquatable implementation in our Find(predicate) call.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

伤感在游骋 2024-12-06 12:28:56

您可以在 Predicate 中调用 IEquatable 成员。那么你就不会重复自己了。

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

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

You can call the IEquatable<T> member(s) in your Predicate<T>. Then you won't be repeating yourself.

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

MyClass found = list.Find( mc => mc.Equals(a) );
醉生梦死 2024-12-06 12:28:56

这个怎么样

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

how about this

list.Any(i => i.ID == searchObj.ID);
中性美 2024-12-06 12:28:56

编辑:

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

int index = myList.IndexOf(mySample);

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

但这会很奇怪,因为显然,您的平等定义并不完全是全貌 - 在我看来,这有点滥用平等。

EDIT:

I think I understood your question now. You can use the List<T>.IndexOf method for this purpose:

int index = myList.IndexOf(mySample);

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

But this would be quite strange, because clearly, your equality definition isn't quite the whole picture - it's a bit of an abuse of equality, IMO.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文