【问题标题】:vb.net - add object to arraylistvb.net - 将对象添加到数组列表
【发布时间】:2011-12-05 08:15:03
【问题描述】:

我在将对象添加到数组列表时遇到了一些问题。

基本上,该对象有两个属性(文件 ID/名称),但我不知道如何分配这些属性。在运行时,它会因未找到对象的公共成员而出错。

Private QueueList As New ArrayList
Public Sub Queue(ByVal FileName As String, ByVal FileID As Integer)
    Dim QueueObj As New Object
    QueueObj.FileID = "Test 1"
    QueueObj.FileName = "Test 2"
    QueueList.Add(QueueObj)
End Sub

我还想知道如何在数组列表上进行循环并访问每条记录上的两个属性。

谢谢!

【问题讨论】:

  • 你为什么使用arraylist??为这项工作使用列表。

标签: vb.net arrays object arraylist


【解决方案1】:

你不能只使用“对象”。您需要构建自己的类:

Public Class File
    Public Property FileID As Integer
    Public Property FileName As String
    Public Sub New ()
    End Sub
    Public Sub New(ByVal FileName As String, ByVal FileID As Integer)
        Me.FileID = FileID
        Me.FileName = FileName
    End Sub
End Class

然后像这样构建你的队列:

Private QueueList As New ArrayList()
Public Sub Queue(ByVal FileName As String, ByVal FileID As Integer)
    QueueList.Add(New File(FileName, FileID))
End Sub
Public Sub Queue(ByVal FileObj As File)
    QueueList.Add(FileObj)
End Sub

或者,更好的是,使用泛型:

Public QueueList As New List(Of File)()
Public Sub Queue(ByVal FileName As String, ByVal FileID As Integer)
    QueueList.Add(New File(FileName, FileID))
End Sub
Public Sub Queue(ByVal FileObj As File)
    QueueList.Add(FileObj)
End Sub

然后,遍历列表:

For Each item As File In QueueList
    'Console.WriteLine(item.FileID & vbTab & item.FileName)
Next item

【讨论】:

  • 在 VB 10 中使用 Option Strict Off,您可以只使用 Object 并使用 .Net 4 中添加的动态功能。
【解决方案2】:

您需要切换到一个对象来保存您的文件信息,并为强类型集合删除 ArrayList。

public class QueueFile
    public Property FileID as integer
    public property FileName as string
end class

...

Private QueueList As New List(Of QueueFile)
Public Sub Queue(ByVal FileName As String, ByVal FileID As Integer)
    Dim QueueObj As New QueueFile
    QueueObj.FileID = "Test 1"
    QueueObj.FileName = "Test 2"
    QueueList.Add(QueueObj)
End Sub

【讨论】:

    【解决方案3】:

    如果您只有两个值,您可能会发现使用通用 Dictionary 甚至比保留类型安全的 ArrayList(需要装箱和拆箱)或 List(Of T) 更好。

    Private QueueList As New Dictionary(of Integer, String)
    Public Sub Queue(ByVal FileName As String, ByVal FileID As Integer)
       QueueList.Add(FileID, FileName)
    End Sub
    

    如果您确实需要方法名称所指示的队列,请考虑使用通用队列。此外,如果您只需要一个键/值对,则不需要创建自己的类。您可以使用通用的 KeyValuePair(Of T, S):

    Private QueueItems As New Queue(Of KeyValuePair(Of Integer, String))
    Public Sub Queue(ByVal FileName As String, ByVal FileID As Integer)
       QueueItems.Enqueue(New KeyValuePair(Of Integer, String)(FileID, FileName))
    End Sub
    

    要取出项目,请使用 QueueItems.Dequeue。

    【讨论】:

      猜你喜欢
      • 2013-09-03
      • 2012-08-02
      • 1970-01-01
      • 2017-11-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 2012-10-30
      相关资源
      最近更新 更多