在列表中查找项目<&燃气轮机;使用C#

在列表中查找项目<&燃气轮机;使用C#,c#,.net,C#,.net,我有一个包含对象集合的列表 如何在此列表中搜索object.Property==myValue的项目?您有几个选项: item = objects.Find(obj => obj.property==myValue); 使用: 使用: 如果找不到匹配项,这两个选项都返回default(T)(null,用于引用类型) 如以下评论中所述,您应该针对您的场景使用适当的比较形式: =用于简单值类型或需要使用运算符重载的情况 object.Equals(a,b)适用于类型未知或比较可能被覆盖

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


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

您有几个选项:

item = objects.Find(obj => obj.property==myValue);
  • 使用:

  • 使用:

  • 如果找不到匹配项,这两个选项都返回
    default(T)
    null
    ,用于引用类型)

    如以下评论中所述,您应该针对您的场景使用适当的比较形式:

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

    我想在我们提供真正有用的答案之前,我们需要更多关于您所做的工作以及失败原因的信息。

    对于.NET 2.0:

    var myItem = myList.Find(item => item.property == "something");
    
    list.Find(delegate(Item i) { return i.Property == someValue; });
    

    这是基于Drew上面的回答,但要简洁一点。

    忘了提到我正在使用.netv2@Peter--哈哈,不错。现在时间还早,我脑子里的编译器已经下班了:)你应该使用
    Equals
    进行比较,除非你知道
    =
    对于你正在比较的特定类型是有效的
    =
    通常会比较引用标识,而引用标识很可能没有理想的语义。我通常在不知道类型时使用
    object.Equals(a,b)
    ,因为这会考虑特定类型的比较并巧妙地处理空值,虽然这条规则的例外是字符串比较,程序员应该指出它是顺序比较还是区域性敏感比较(通过
    string.Equals(a,b,StringComparison)
    @Joren-同意。我想我们都在同一页:)如果您使用的是.NET 3.0或更高版本,您应该支持LINQ方式,因为LINQ适用于任何IEnumerable和IEnumerable。“查找”方法特定于列表,一旦您必须处理不同的集合,它将无法帮助您。简而言之,没有代码示例。。。下面的答案要好得多。我知道我参加聚会有点晚了,但这个答案对于前来寻找信息的人来说是非常无用的。它没有解释列表。Find可以做什么以及如何使用它。与Drew Noakes的解释相反,这更深入地解释了如何使用它,它实际上给出了“如何在列表中查找项目”问题的正确答案。这个答案只不过是一个函数的链接,没有解释为什么应该在链接中使用函数。
    var myItem = myList.Find(item => item.property == "something");
    
    list.Find(delegate(Item i) { return i.Property == someValue; });
    
    list.FirstOrDefault(i => i.property == someValue);