vb.net - добавить объект в arraylist - PullRequest
3 голосов
/ 11 октября 2011

У меня возникли проблемы с добавлением объекта в массив.

В основном у объекта есть два свойства (идентификатор файла / имя), но я не могу понять, как назначить эти свойства.Во время выполнения он выводит сообщение об ошибке с открытым членом на объекте, который не найден.

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

Я также хотел бы знать, как я могу выполнить цикл для массива и получить доступ к двум свойствам в каждой записи.*

Спасибо!

Ответы [ 3 ]

6 голосов
/ 11 октября 2011

Вы не можете просто использовать «Объект» для этого. Вам нужно построить свой собственный класс:

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
2 голосов
/ 11 октября 2011

Вам нужно переключиться на объект для хранения информации о вашем файле и удалить 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 голосов
/ 11 октября 2011

Если у вас есть только два значения, использование общего словаря может оказаться даже лучше, чем 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...