2010-02-24 46 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#演員操作員所做的所有事情,但也包含更多內容。