如何编写包含语句来匹配类的成员?
Posted
技术标签:
【中文标题】如何编写包含语句来匹配类的成员?【英文标题】: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 的工作吗?
【问题讨论】:
【参考方案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)
以上是关于如何编写包含语句来匹配类的成员?的主要内容,如果未能解决你的问题,请参考以下文章