在下面的代碼,什麼VB.Net每個迴路看看推斷類型
For Each item in MyCollection
...
Next
什麼編譯器使用,以確定item
類型?
比如讓說我有這個類,它繼承了非泛型集合,
Public Class BaseDataObjectGenericCollection(Of T)
Inherits BaseDataObjectCollection
End Class
每個循環仍然推斷項目類型爲Object
。我將如何修改上述類以使類型推斷工作?
編輯:Per 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
的函數?
現在一切都有意義。我必須記得下次檢查規格。我總是依靠谷歌從混亂的詞彙中找出我想要的。 – Kratz 2012-02-21 17:20:20