我有一个包含对象集合的列表。
如何在这个列表中搜索一个属性为myValue
的对象?
所有这些选项都会返回default(T)
(对于引用类型则为null
),如果没有找到匹配项。
如下面的评论所述,您应该针对您的场景使用适当的比较形式:
==
用于简单值类型或希望使用运算符重载的情况object.Equals(a, b)
用于大多数类型未知或比较已被覆盖的情况string.Equals(a, b, StringComparison)
用于比较字符串object.ReferenceEquals(a, b)
用于标识比较,通常是最快的List.Find有什么问题吗?
在我们能够提供真正有帮助的答案之前,我认为我们需要更多了解您所做的事情以及为什么它失败的信息。
var myItem = myList.Find(item => item.property == "something");
item = objects.Find(obj => obj.property==myValue);
list.FirstOrDefault(i => i.property == someValue);
对于 .NET 2.0:
list.Find(delegate(Item i) { return i.Property == someValue; });
==
,否则你应该使用Equals
进行比较。==
通常会比较引用标识,这很可能不具有所需的语义。 - Jorenobject.Equals(a,b)
,因为它考虑了特定于类型的比较并且能够很好地处理空值。但是对于字符串比较,这个规则有例外,程序员应该通过string.Equals(a,b,StringComparison)
指示它是基于顺序还是基于区域敏感的比较。 - Drew Noakesobject.Equals
是一个好选择)。我的意图更多的是说,默认情况下应该使用Equals
,只有当你确定==
是正确的(例如,不可变类型重载它,或者引用类型没有重载它但你想要引用相等性)时,才应该考虑使用它。 - Joren