【问题标题】:How to write a contains statement to match a member of a class?如何编写包含语句来匹配类的成员?
【发布时间】:2011-12-31 13:55:36
【问题描述】:

如果我有以下结构:

Public Class UserData
    Public ID As String
    Public Name As String
End Class

如何在这样的条件下选择它?

Dim myUsers As New System.Collections.Generic.List(Of UserData)

If myUsers.Contains(.ID = "1") = True Then
    ...

我知道myUsers.Contains(.ID = "1") 是完全错误的,但我很好奇如何做这样的事情?可能吗?这是 LINQ 的工作吗?

【问题讨论】:

    标签: asp.net vb.net if-statement conditional contains


    【解决方案1】:

    你为什么不使用字典

    var myUserDict = new Dictionary<String, UserData>
    if(myUserDict.ContainsKey("1"))..
    

    只有当你要对选定的用户做任何事情时才有意义。

    【讨论】:

    • 到你的'Any'不是'System.Collections.Generic.List(Of UserData)的成员问题:你使用的是System.Linq命名空间吗?
    • 不...不,我不是。我假设这就是我看不到 Any() 函数的原因。另外,我之所以这样做,是因为我将数据绑定到 GridView
    【解决方案2】:

    这个怎么样:

    If myUsers.Any(Function(u) u.ID = "1") Then
       ...
    

    当然,如果您要多次执行此操作,最好创建一个搜索集:

    Dim myUserSet = New HashSet(Of String)(myUsers.[Select](Function(u) u.ID))
    For Each userId In selectedUserIds
        If myUserSet.Contains(userId) Then
           ...
    

    我的 vb 生锈了。请原谅语法错误

    【讨论】:

    • 我将不止一次这样做,但它是在 RowDataBound 事件中......所以任何类型的优化都会一遍又一遍地运行......除非我使用静态成员?我对 .NET 很陌生
    • @afuzzyllama:您应该能够在与 myUsers 相同的范围内创建 HashSet。如果 myUsers 是根据事件中的数据计算的,那么创建 HashSet 可能没有意义。
    • I am getting this: 'Any' is not a member of 'System.Collections.Generic.List(Of UserData)。不过我会尝试 HashSet 的想法。
    • @afuzzyllama:“Any”是一种扩展方法。您需要在文件中包含 System.Linq 命名空间。
    【解决方案3】:

    这是 VB 版本:

    If myUsers.Any(Function(i) i.ID = "1") Then ...
    

    【讨论】:

    • 我收到了这个:'Any' is not a member of 'System.Collections.Generic.List(Of UserData)
    猜你喜欢
    • 2011-09-07
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    相关资源
    最近更新 更多