VB.NET类型转换为listview标记对象

时间:2010-02-24 16:05:32

标签: c# vb.net listviewitem casting

在C#中我会做类似的事情:

  

mytype val =   (MYTYPE)mylistview.SelectedItems(0).TAG;

我怎样才能在VB.NET中做同样的事情?

3 个答案:

答案 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#中的转换 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)