Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vb.net-将对象添加到arraylist_Vb.net_Arrays_Object_Arraylist - Fatal编程技术网

vb.net-将对象添加到arraylist

vb.net-将对象添加到arraylist,vb.net,arrays,object,arraylist,Vb.net,Arrays,Object,Arraylist,向arraylist添加对象时遇到问题 基本上,对象有两个属性(文件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" Queu

向arraylist添加对象时遇到问题

基本上,对象有两个属性(文件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上执行循环并访问每条记录上的两个属性


谢谢

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

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

你不能只是用“对象”来做这个。您需要构建自己的类:

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

如果您只有两个值,您可能会发现使用泛型字典比使用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(T,S):


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

为什么要使用arraylist??使用列表进行此工作。在VB10中关闭选项Strict后,您可以只使用Object并使用.NET4中添加的动态功能。
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
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