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