【问题标题】:List.Contains based on a property of a list itemList.Contains 基于列表项的属性
【发布时间】:2011-06-07 10:40:09
【问题描述】:

我有一个 myList 列表 MyObjects。是否可以根据 VB.NET 中myObject 的属性检查myList 是否包含特定的myObject?在 C# 中,你会得到类似的东西:

myList.Exists(myObject => myObject.property1 == 3)

【问题讨论】:

    标签: .net vb.net list filter


    【解决方案1】:

    我相信您也可以在 VB.NET 中使用 myList.Exists,只需使用其 lambda 表达式语法。

    但是,更通用的方法是使用Any LINQ 运算符,并带有采用谓词的重载。例如:

    myList.Any(Function(myObject) myObject.property1 = 3)
    

    我个人更喜欢使用 LINQ 运算符,除非更具体的 List<T> 方法出于某种原因提供了显着优势。

    编辑:

    如果之后需要访问该对象,只需使用:

    Dim foo = myList.FirstOrDefault(Function(myObject) myObject.property1 = 3)
    If (foo Is Not Nothing) Then
        ...
    End If
    

    【讨论】:

    • 谢谢。如果有匹配项,我该如何访问匹配的元素?我使用 singleOrDefault 吗?
    • @Prabhu:或FirstOrDefault。我建议你用它来开始 - 找到它然后再寻找是没有意义的。
    • 谢谢!实际上我需要访问该项目并编辑一个属性。如果我编辑 foo,如何使用更新后的 foo 更新列表?
    • @Prabhu:假设MyObject 是一个类,那么无论如何您都将更新列表元素所引用的对象。了解引用类型在 .NET 中的工作原理真的很重要。见pobox.com/~skeet/csharp/references.html
    • 在尝试执行“Is Not Nothing”检查时,我得到“Is 运算符不接受整数类型的操作数。操作数必须是引用或可为空的类型”。我验证了 myObject 是一个类。有任何想法吗?谢谢。
    【解决方案2】:

    大致相同,只是 VB.NET 对 lambda 表达式有不同的语法:

    myList.Exists(Function(myObject) myObject.property1 = 3)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 2019-01-22
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多