2

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

mytype val = (mytype)mylistview.SelectedItems(0).Tag;

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

4

3 回答 3

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# 中的强制转换更多的转换

在这种特殊情况下,我认为DirectCast可能是您所追求的,因为它应该只是一个参考转换。

于 2010-02-24T16:07:57.973 回答
4

对于绝大多数情况,CType操作员会在这里给出正确的行为。

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

然而,这并非在所有情况下都是正确的。原因是 C# 强制转换运算符和 VB 中的等效运算符之间没有 1-1 映射。C# 转换运算符支持 CLR 和用户定义的转换运算符。

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

于 2010-02-24T16:12:41.910 回答
3

不确定我是否正确,不知道您到底要做什么,但一般语法是:

val = CType(listview.selecteditems(0).tag,mytype)
于 2010-02-24T16:08:11.890 回答