在C#中我会做类似的事情:
mytype val = (MYTYPE)mylistview.SelectedItems(0).TAG;
我怎样才能在VB.NET中做同样的事情?
答案 0 :(得分:4)
我的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#中的转换3> p>
在这种特殊情况下,我认为DirectCast
可能就是你所追求的,因为它应该只是一个参考转换。
答案 1 :(得分:4)
对于绝大多数情况,CType
运算符将在此处给出正确的行为。
Dim val = CType(mylistview.SelectedItems(0).Tag,MyType)
然而,在每种情况下都不是这样。原因是C#cast运算符和VB中的等效运算符之间没有1-1映射。 C#强制转换运算符支持CLR和用户定义的转换运算符。
VB的两个主要的转换操作符是DirectCast和CType。 DirectCast仅支持运行时转换,并且将错过用户定义的转换。 CType支持运行时和用户定义的转换。但它也支持词法转换(例如字符串文字“123”到Integer
类型)。因此它将捕获C#cast运算符所做的所有事情,但也包含更多内容。
答案 2 :(得分:3)
我不确定我不知道你究竟想要做什么,但一般语法是:
val = CType(listview.selecteditems(0).tag,mytype)