我有一个包含对象集合的列表。
如何在此列表中搜索object.Property == myValue
?
答案 0 :(得分:109)
您有几个选择:
list.Where(i => i.Property == value).FirstOrDefault(); // C# 3.0+
使用List.Find:
list.Find(i => i.Property == value); // C# 3.0+
list.Find(delegate(Item i) { return i.Property == value; }); // C# 2.0+
如果找不到匹配项,这两个选项都会返回default(T)
(null
作为参考类型)。
如下面的评论中所述,您应该为您的方案使用适当的比较形式:
==
表示简单的值类型或需要使用运算符重载object.Equals(a,b)
适用于类型未知或比较可能被覆盖的大多数情况string.Equals(a,b,StringComparison)
用于比较字符串object.ReferenceEquals(a,b)
用于身份比较,通常是最快的答案 1 :(得分:28)
List.Find ??
有什么问题在我们能够提供真正有用的答案之前,我认为我们需要更多关于您所做的事情以及失败原因的信息。
答案 2 :(得分:4)
var myItem = myList.Find(item => item.property == "something");
答案 3 :(得分:1)
item = objects.Find(obj => obj.property==myValue);
答案 4 :(得分:0)
对于.NET 2.0:
list.Find(delegate(Item i) { return i.Property == someValue; });
答案 5 :(得分:0)
list.FirstOrDefault(i => i.property == someValue);
这是基于 Drew 上面的回答,但更简洁一些。