2009-04-14 42 views
6

我是一個C#程序員誰被迫使用VB(呃!!!!)。我想了一個方法來檢查多個控制狀態,在C#中,這將完成像這樣:在Visual Basic中投射?

if (((CheckBox)sender).Checked == true) 
{ 
    // Do something... 
} 
else 
{ 
    // Do something else... 
} 

所以,我怎麼能做到這一點在VB?

+0

的更多的經驗,我在VB中得到少,我發現自己鑄造這樣的控制。我知道這不是你問的,但你可以只是: 如果Me.CheckBoxOfMine.Checked然後... – rvarcher 2009-04-14 20:55:51

+2

@rvarcher:我個人不喜歡VB,我希望我沒有太多的經驗。沒有冒犯,只是我的意見。 – Kredns 2009-04-14 23:53:19

回答

15

C#:

(CheckBox)sender 

VB:

CType(sender, CheckBox) 
+0

只是爲了澄清Ctype是IL等價於(int)x boxing?或DirectCast。我認爲DirectCast與此完全相同。 – 2009-04-14 18:21:16

+0

這個演員陣容並不相同。 VB版本實際上是一個詞彙轉換,而不是CLR轉換。 – JaredPar 2009-04-14 18:26:13

+0

C#(CheckBox)風格的轉換位於DirectCast和CType()之間的某處。 DirectCast越來越嚴格,CType與Convert.To更接近(不一樣)。____() – 2009-04-14 18:28:45

10

VB實際上有2個鑄造的概念。

  1. CLR風格鑄造
  2. 詞彙鑄造

CLR的風格轉換是一個C#用戶就是比較熟悉。這使用CLR類型系統和轉換來執行演員。 VB有DirectCast和TryCast相當於C#強制轉換和作爲運算符分別。

除了CLR類型系統外,VB中的詞彙表還會做額外的工作。它們實際上代表了潛在演員的超集。詞法轉換很容易通過在轉換運算符上查找C前綴來發現:CType,CInt,CString等......如果編譯器不直接知道這些轉換,它們將經歷VB運行時間。運行時間將做的類型系統之上解釋,允許像下面蒙上工作

Dim v1 = CType("1", Integer) 
Dim v2 = CBool("1") 
2

DirectCast在編譯時將進行轉換,但只能用來施放引用類型。 Ctype將在運行時執行轉換(比編譯時轉換慢),但對convertng值類型顯然很有用。 在你的情況下,「發件人」是一個引用類型,所以DirectCast將是一條路。

0

VB.net中的投射使用關鍵字ctype。 所以C#語句(CheckBox)sender等效於VB.net中的ctype(sender,CheckBox)

因此您在VB.net代碼:

if ctype(sender,CheckBox).Checked =True Then 
    ' Do something... 
else 
    ' Do something else... 
End If