Почему я не могу перечислять через элементы в этой коллекции:?

#.net #vb.net

#.net #vb.net

Вопрос:

Разве массивы объектов не поддаются перечислению?

Ищите комментарии в коде

 Public Class AddressCollection

    Inherits System.Collections.ObjectModel.Collection(Of AddressType)

    Public Sub New()

    End Sub

    Public Sub New(ByVal ParamArray addressTypeArray() As AddressType)

        For Each currentAddress As AddressType In Me

            If currentAddress IsNot Nothing Then '<<<<--NEVER HITS THIS LINE
                Me.Add(currentAddress)
            End If
        Next

        For i As Integer = 0 To addressTypeArray.Count - 1

            Dim currentAddress As AddressType = addressTypeArray(i) '<<< BUT IT DOES HIT THIS LINE

            If currentAddress IsNot Nothing Then
                Me.Add(currentAddress)
            End If

        Next

    End Sub
  

Комментарии:

1. Если бы это не было перечислимо, это не скомпилировалось бы… Здесь не показан полный сценарий… Что предоставляет вызывающий объект?

Ответ №1:

Я думаю, вы хотите:

 For Each currentAddress As AddressType In addressTypeArray
  

.. чтобы соответствовать эквиваленту:

 For i As Integer = 0 To addressTypeArray.Count - 1
  

Ответ №2:

Они перечисляют. Но разве вы не предпочли бы перебирать addressTypeArray , а не Me ? Me я думаю, что в конструкторе все еще пусто, и именно поэтому вы никогда не попадаете в строку.

Приветствия, Маттиас

Ответ №3:

Почему это должно быть? Вы находитесь в конструкторе вашего класса, и никакие объекты не были добавлены в коллекцию, представленную вашим классом… Чтобы убедиться в этом, проверьте результат Me.Count перед первым For Each . Это будет 0. Я полагаю, вы действительно хотите выполнить итерацию по предоставленному параметру addressTypeArray .