2011-10-11 149 views
3

我在添加对象到arraylist时遇到了一些麻烦。vb.net - 将对象添加到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上做一个循环,并在每条记录上访问这两个特性。

谢谢!

+2

为什么使用arraylist?使用列表进行这项工作。 –

回答

6

你不能只用 “对象” 这一点。你需要建立自己的类:

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 
+0

+1不错的答案!对OP来说可能太复杂了? ;) – gbianchi

+0

使用VB 10中的Option Strict Off,您可以使用Object并使用.Net 4中添加的动态功能。 –

+0

完美答案Joel,谢谢! – Joe

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 
0

如果你在如果您有两个值,您可能会发现使用通用字典甚至比保留类型安全性的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):

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。