在List<>中查找项目使用C#

时间:2009-09-28 07:03:20

标签: c# .net

我有一个包含对象集合的列表。

如何在此列表中搜索object.Property == myValue

中的项目

6 个答案:

答案 0 :(得分:109)

您有几个选择:

  1. 使用Enumerable.Where

    list.Where(i => i.Property == value).FirstOrDefault();       // C# 3.0+
    
  2. 使用List.Find

    list.Find(i => i.Property == value);                         // C# 3.0+
    list.Find(delegate(Item i) { return i.Property == value; }); // C# 2.0+
    
  3. 如果找不到匹配项,这两个选项都会返回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 上面的回答,但更简洁一些。