基于列表项属性的List.Contains

13

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

myList.Exists(myObject => myObject.property1 == 3)
2个回答

26

我相信你也可以在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
@Prabhu:或者使用 FirstOrDefault。我建议您从那里开始 - 找到它,然后再次查找是没有意义的。 - Jon Skeet
谢谢!实际上我需要访问该项并编辑属性。如果我编辑了foo,那么如何使用更新后的foo更新列表? - Prabhu
1
@Prabhu:假设MyObject是一个类,你将会更新列表元素所引用的对象。在.NET中,理解引用类型的工作原理非常重要。请参阅http://pobox.com/~skeet/csharp/references.html - Jon Skeet
当我尝试进行“不是空”检查时,出现“Is运算符不接受整数类型的操作数。操作数必须是引用或可空类型”的错误。我已经验证了myObject是一个类。有什么想法吗?谢谢。 - Prabhu

7

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接