2011-10-11 7 views
3

arraylist에 객체를 추가하는 데 문제가 있습니다.vb.net - arraylist에 객체 추가

기본적으로 개체에는 두 가지 속성 (파일 ID/이름)이 있지만 이러한 속성을 할당하는 방법을 알 수 없습니다. 런타임 중에 객체가 발견되지 않으면 public 멤버와 함께 오류가 발생합니다. 나는 또한 내가 ArrayList의에 루프를하고 각 레코드에있는 두 개의 property는 액세스 할 수있는 방법을 알고 싶습니다

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 

.

감사합니다.

+2

왜 arraylist를 사용하고 있습니까 ?? 이 작품에 대한 목록을 사용하십시오. –

답변

6

당신은이에 대해 "개체"를 사용할 수 없습니다. 이상 루프,

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 

다음 : 제네릭을 사용, 더 나은,

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

: 그리고 당신은 당신의 자신의 클래스를 구축해야 목록 :

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

+1 좋은 답변! 어쩌면 OP를 복잡하게 만들까요? ;) – gbianchi

+0

Option Strict Off VB 10에서는 Object를 사용하고 .Net 4에 추가 된 동적 기능을 사용할 수 있습니다. –

+0

Perfect answer Joel, thanks! – 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 

메서드 이름으로 큐를 실제로 나타내려면 일반 큐를 사용하는 것이 좋습니다. 또한 키/값 쌍만 있으면 자신 만의 클래스를 만들 필요가 없습니다. 당신은 (T, S 중) 일반 KeyValuePair를 사용할 수 있습니다

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를 사용합니다.