Vb.net 添加&;使用字典检索列表项

Vb.net 添加&;使用字典检索列表项,vb.net,list,dictionary,Vb.net,List,Dictionary,我需要为每个用户添加一个项目列表。用户ID是唯一的,每个用户都有多个具有devicename、devicetype和description的设备 所以我创建了一个字典,为每个用户的用户id添加这些设备的列表作为密钥 Dim dicUserDevices As New Dictionary(Of String, List(Of Object())) If dicUserDevices.ContainsKey(userid) Then dicUserDevices(u

我需要为每个用户添加一个项目列表。用户ID是唯一的,每个用户都有多个具有devicename、devicetype和description的设备

所以我创建了一个字典,为每个用户的用户id添加这些设备的列表作为密钥

    Dim dicUserDevices As New Dictionary(Of String, List(Of Object()))
    If dicUserDevices.ContainsKey(userid) Then
        dicUserDevices(userid).Add(New Object() {devicename, devicetype, devicedescription})
    Else
           dicUserDevices.Add(userid, New List(Of Object()))
           dicUserDevices(userid).Add(New Object() {devicename, devicetype, devicedescription})
    End If
要检索它,请执行以下操作:

 Dim devices = dicUserDevices.Item(userid)
 For Each item In devices
            Dim device = {item(0), item(1), item(2)}
 Next

这是可行的,但我对使用索引的方式感到不舒服。我做错了吗?这是个坏习惯吗?在某些情况下,它会给我错误吗?最好的方法是什么?

我将在这里详细介绍一下-一个类会有一种
OOP
的感觉,并且查询简单直观

Public Class DeviceInfo 
 Public Property User As String
 Public Property DeviceName As String
 Public Property DeviceType As String
 Public Property DeviceDescription As String
End Class
如果您喜欢ContainsKey功能,请使用以下选项:

Public Class DeviceInfos : Inherits List(Of DeviceInfo)
  Public Function ContainsKey(user As String) As Boolean
    Return Me.Any(Function(di) di.User = user)
  End Function
End Class
用法:

Private UserDevices As New DeviceInfos
填充您的对象:

If Not UserDevices.ContainsKey(userId) Then
  Dim di As New DeviceInfo 
  di.User = userId
  di.DeviceName = devicename
  di.DeviceType = devicetype
  di.DeviceDescription = devicedescription
  UserDevices.Add(di)
End If
查询:

Dim deviceTypeQuery = From di In UserDevices Where 
                      di.DeviceType = "some type" And
                      di.User = "some user id"

您可以创建一个类来封装每个设备的数据,并在列表中使用它。然后,您可以为给定用户循环列表中的设备,并为每个循环设置一个
。。或者将其中一个DeviceInfo属性设置为一个集合(取决于设备的类型以及您如何识别它们)。在某些情况下,当前代码是否会中断?我假设,由于我只添加了3项,所以在检索时为它们编制索引0、1、2应该不会有问题。为什么要使用
列表(对象)
?这样做违背了泛型的目的。您也可以使用
ArrayList
。按照OneFineDay的建议去做,为你的设备创建一个类,然后使用
列表(设备)