0

このようなジェネリッククラスのビルドがあります

Public Class TabellaCustom(Of myType, TValue) Implements IEnumerable(Of TValue)
Private mKey As myType
Private mContenuto As TValue

...

Public Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of TValue) Implements System.Collections.Generic.IEnumerable(Of TValue).GetEnumerator
        Return DirectCast(mContenuto, IEnumerator(Of TValue))
End Function

私がこのようなことをするとき

dim Color as new ColorsEnumerable
Dim test(0) As StampeCommonFunctions.TabellaCustom(Of Color, String)
test(0) = New StampeCommonFunctions.TabellaCustom(Of Color, String)(Color.Red, "Red")

test.GetEnumerator()

エラーが発生しました:

 Unable to cast object of type 'System.String' to type 'System.Collections.Generic.IEnumerator`1[System.String]'.

このエラーを解決するにはどうすればよいですか? クラス内でオブジェクトの型を指定する必要がありますか?

4

1 に答える 1

1

mContenutoは文字列であり、それを にキャストしようとしていますIEnumerator(Of String)が、stringクラスは を実装していませんIEnumerator(Of String)

それが例外があなたに言っていることです。

あなたのクラスは 2 つの値 ( mKey, mContenuto) しか保持していないようですが、なぜ実装IEnumerable<T>したいのでしょうか? これはいらないらしい…


それでもGetEnumerator、次のように実装できます。

Public Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of TValue) Implements System.Collections.Generic.IEnumerable(Of TValue).GetEnumerator
    Return {Me.mContenuto}.AsEnumerable().GetEnumerator()
End Function

Private Function GetEnumerator1() As System.Collections.IEnumerator Implements System.Collections.IEnumerable.GetEnumerator
    Return GetEnumerator()
End Function

これは、から単一要素の配列を作成し、mContenutoその を返すことによって機能しEnumeratorます。

于 2013-07-29T13:35:11.370 に答える