在C#我想这样做:VB.NET类型转换一个列表视图标签对象
MYTYPE VAL = (MYTYPE)mylistview.SelectedItems(0).TAG;
我该怎么在VB.NET中做同样的事情?
在C#我想这样做:VB.NET类型转换一个列表视图标签对象
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)用户指定的转换,而CType
将执行更多转换比在C#中投的会
在这种特殊情况下,I th墨水DirectCast
可能是你之后的,因为它应该只是一个参考转换。
不知道我是对的,不知道究竟你正在试图做的,但一般语法是:
val = CType(listview.selecteditems(0).tag,mytype)
对于绝大多数病例CType
运营商将在这里给正确的行为。
Dim val = CType(mylistview.SelectedItems(0).Tag,MyType)
然而,在每种情况下都不是这样。之所以这样说,是因为C#转换运算符和VB中的等价运算符之间没有1-1映射。 C#转换运算符支持CLR和用户定义的转换运算符。
VB的两个主要铸造操作符是DirectCast和CType。 DirectCast仅支持运行时转换,并且会错过用户定义的转换。 CType支持运行时和用户定义的转换。但它也支持词法转换(例如字符串文字“123”到Integer
类型)。因此它将捕获C#演员操作员所做的所有事情,但也包含更多内容。
我会一如既往地推迟Jon Skeet :) – 2010-02-24 16:09:16