在 List中查找项目通过提供示例对象实例
为什么有 List
方法但没有 List
方法?仅支持支持谓词的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 Find
s 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以在
Predicate
中调用IEquatable
成员。那么你就不会重复自己了。You can call the
IEquatable<T>
member(s) in yourPredicate<T>
. Then you won't be repeating yourself.这个怎么样
how about this
编辑:
我想我现在明白你的问题了。您可以使用
List.IndexOf
用于此目的的方法:但这会很奇怪,因为显然,您的平等定义并不完全是全貌 - 在我看来,这有点滥用平等。
EDIT:
I think I understood your question now. You can use the
List<T>.IndexOf
method for this purpose: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.