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

JL.*_*JL. 39 .net c#

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

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

Dre*_*kes 114

你有几个选择:

  1. 使用Enumerable.Where:

    list.Where(i => i.Property == value).FirstOrDefault();       // C# 3.0+
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用List.Find:

    list.Find(i => i.Property == value);                         // C# 3.0+
    list.Find(delegate(Item i) { return i.Property == value; }); // C# 2.0+
    
    Run Code Online (Sandbox Code Playgroud)

如果未找到匹配项,则这两个选项都会返回default(T)(null对于引用类型).

如下面的评论中所述,您应该为您的方案使用适当的比较形式:

  • == 对于简单值类型或需要使用运算符重载的情况
  • object.Equals(a,b) 对于类型未知或可能已覆盖比较的大多数情况
  • string.Equals(a,b,StringComparison) 用于比较字符串
  • object.ReferenceEquals(a,b) 用于身份比较,通常是最快的

  • 4 upvotes并仍然使用赋值运算符来比较值.嗯.... (2认同)
  • @Joren-同意。我想我们俩都在同一页上:) (2认同)

abe*_*nky 28

List.Find有什么问题?

在我们能够提供真正有用的答案之前,我认为我们需要更多关于您所做的事情以及失败原因的信息.

  • 如果您使用的是.NET 3.0或更高版本,则应该支持LINQ方式,因为LINQ适用于任何IEnumerable和IEnumerable <T>.Find-Method特定于List <T>,一旦您必须处理不同的集合,就无法帮助您. (3认同)
  • 简而言之,没有代码示例......下面的答案要好得多。 (2认同)

sha*_*esh 5

var myItem = myList.Find(item => item.property == "something");
Run Code Online (Sandbox Code Playgroud)