2011-10-11 115 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。