C#では、次のようなことをします:
mytype val = (mytype)mylistview.SelectedItems(0).Tag;
VB.NET で同じことを行うにはどうすればよいですか?
C#では、次のようなことをします:
mytype val = (mytype)mylistview.SelectedItems(0).Tag;
VB.NET で同じことを行うにはどうすればよいですか?
私の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
は、参照変換にすぎないはずなので、おそらくあなたが求めているものだと思います。
ほとんどの場合、CType
オペレーターはここで正しい動作を示します。
Dim val = CType(mylistview.SelectedItems(0).Tag,MyType)
ただし、これはすべての場合に当てはまるわけではありません。その理由は、C# のキャスト演算子と VB の同等の演算子の間に 1 対 1 のマッピングがないためです。C# のキャスト演算子は、CLR とユーザー定義の変換演算子の両方をサポートしています。
VB の 2 つの主なキャスト オペレータは、DirectCast と CType です。DirectCast は実行時の変換のみをサポートし、ユーザー定義の変換は見逃されます。CType は、実行時およびユーザー定義の変換をサポートします。ただし、字句変換 (文字列リテラル "123" から型への変換など) もサポートしていますInteger
。そのため、C# キャスト オペレーターが行うすべてのことをキャッチしますが、さらに多くのことも含めます。
あなたが何をしようとしているのか正確にはわかりませんが、一般的な構文は次のようになります。
val = CType(listview.selecteditems(0).tag,mytype)