2010-02-24 42 views

回答

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#中投的会

在这种特殊情况下,I th墨水DirectCast可能是你之后的,因为它应该只是一个参考转换。

3

不知道我是对的,不知道究竟你正在试图做的,但一般语法是:

val = CType(listview.selecteditems(0).tag,mytype) 
+0

我会一如既往地推迟Jon Skeet :) – 2010-02-24 16:09:16

4

对于绝大多数病例CType运营商将在这里给正确的行为。

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

然而,在每种情况下都不是这样。之所以这样说,是因为C#转换运算符和VB中的等价运算符之间没有1-1映射。 C#转换运算符支持CLR和用户定义的转换运算符。

VB的两个主要铸造操作符是DirectCast和CType。 DirectCast仅支持运行时转换,并且会错过用户定义的转换。 CType支持运行时和用户定义的转换。但它也支持词法转换(例如字符串文字“123”到Integer类型)。因此它将捕获C#演员操作员所做的所有事情,但也包含更多内容。