В следующем коде:
For Each item in MyCollection
...
Next
Что использует компилятор для определения типа item
?
Например, допустим, у меня есть этот класс, который наследуетне универсальная коллекция,
Public Class BaseDataObjectGenericCollection(Of T)
Inherits BaseDataObjectCollection
End Class
A для каждого цикла все еще выводит тип элемента как Object
.Как мне изменить этот класс, чтобы вывод типа работал?
Редактировать: В ответ на Beatles1692, Реализация IEnumerator (Of T) вроде работает.Базовый класс уже имеет функцию GetEnumerator
, унаследованную от CollectionBase
, поэтому моя реализация выглядела так:
Public Function GetEnumerator1() As System.Collections.Generic.IEnumerator(Of T) Implements System.Collections.Generic.IEnumerable(Of T).GetEnumerator
Return MyBase.Cast(Of T)().GetEnumerator
End Function
Однако цикл for по-прежнему выводит тип как объект.Но, если я изменю реализацию интерфейса на это,
Public Shadows Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of T) Implements System.Collections.Generic.IEnumerable(Of T).GetEnumerator
Return MyBase.Cast(Of T)().GetEnumerator
End Function
Это работает, цикл for получает правильный вывод типа.Итак, я думаю, что вопрос сейчас, For Each
просто ищет функцию с именем GetEnumerator
?