2011-10-10 8 views
0

私はVS2008でvb.netプログラムを開発しています。私の場合、dt_listはList(Single)のインスタンスメンバーです。私はGetTypeが定義されていませんか?

dt_list = CType(ser2.Deserialize(r), dt_list.GetType())

を書いたときVS2008は文句 "タイプ 'dt_list.GetTypeは()' が定義されていません。"。

なぜですか?前もって感謝します。

+0

'dt_list'はどのように定義されていますか? –

+0

@ Hand-E-Food dt_listはList(Single)のインスタンスメンバーです – Grissiom

+0

申し訳ありませんが、私は完全に盲目です。 –

答えて

1

これは許可されていない理由は、実行時にGetType()の型の正確な値を決定する必要があるからです。 CTypeの2番目のパラメータは、「DimステートメントのAs句内で有効な式、つまりデータ型、オブジェクト、構造体、クラス、またはインターフェイスの名前」(たとえば、List(Of String))でなければなりません。コンパイル時に決定される。しかし、型がコンパイル時に知られていない任意の型にキャスト

より複雑である。

dt_list = CType(ser2.Deserialize(r), List(Of Single)) 

EDIT:

は、次のは、それに応じて合法です。 MSDNフォーラムのthis questionへの提案された回答は、1つのアプローチを示しています。それはC#にありますが、私はVB.NETでも同じアプローチを使用できると推測します。

+0

したがって、GetTypeは実行時ルーチンですが、CTypeはコンパイル時のパラメータが必要です。ダイナミックキャスティングを行う方法はありますか? – Grissiom

0

実行時にキャストタイプを選択して達成しようとしていることは何ですか?

インターフェイスで問題を解決できる場合があります。

Dim dt_list As IList = Ctype(ser2.Deserialize(r), IList) 

これにより、IListのすべてのリストメンバーにアクセスできます。

関連する問題