2

C#では、次のようなことをします:

mytype val = (mytype)mylistview.SelectedItems(0).Tag;

VB.NET で同じことを行うにはどうすればよいですか?

4

3 に答える 3

4

私のVBはひどいですが、次のようになると思います:

Dim val as MyType = CType(mylistview.SelectedItems(0).Tag, MyType)

また

Dim val as MyType = DirectCast(mylistview.SelectedItems(0).Tag, MyType)

DirectCast(IIRC)ユーザー指定の変換を含む他の変換は実行しませんが、C#のキャストよりも多くの変換CType実行します

この特定のケースでDirectCastは、参照変換にすぎないはずなので、おそらくあなたが求めているものだと思います。

于 2010-02-24T16:07:57.973 に答える
4

ほとんどの場合、CTypeオペレーターはここで正しい動作を示します。

Dim val = CType(mylistview.SelectedItems(0).Tag,MyType)

ただし、これはすべての場合に当てはまるわけではありません。その理由は、C# のキャスト演算子と VB の同等の演算子の間に 1 対 1 のマッピングがないためです。C# のキャスト演算子は、CLR とユーザー定義の変換演算子の両方をサポートしています。

VB の 2 つの主なキャスト オペレータは、DirectCast と CType です。DirectCast は実行時の変換のみをサポートし、ユーザー定義の変換は見逃されます。CType は、実行時およびユーザー定義の変換をサポートします。ただし、字句変換 (文字列リテラル "123" から型への変換など) もサポートしていますInteger。そのため、C# キャスト オペレーターが行うすべてのことをキャッチしますが、さらに多くのことも含めます。

于 2010-02-24T16:12:41.910 に答える
3

あなたが何をしようとしているのか正確にはわかりませんが、一般的な構文は次のようになります。

val = CType(listview.selecteditems(0).tag,mytype)
于 2010-02-24T16:08:11.890 に答える