我是一個C#程序員誰被迫使用VB(呃!!!!)。我想了一個方法來檢查多個控制狀態,在C#中,這將完成像這樣:在Visual Basic中投射?
if (((CheckBox)sender).Checked == true)
{
// Do something...
}
else
{
// Do something else...
}
所以,我怎麼能做到這一點在VB?
我是一個C#程序員誰被迫使用VB(呃!!!!)。我想了一個方法來檢查多個控制狀態,在C#中,這將完成像這樣:在Visual Basic中投射?
if (((CheckBox)sender).Checked == true)
{
// Do something...
}
else
{
// Do something else...
}
所以,我怎麼能做到這一點在VB?
C#:
(CheckBox)sender
VB:
CType(sender, CheckBox)
只是爲了澄清Ctype是IL等價於(int)x boxing?或DirectCast。我認爲DirectCast與此完全相同。 – 2009-04-14 18:21:16
這個演員陣容並不相同。 VB版本實際上是一個詞彙轉換,而不是CLR轉換。 – JaredPar 2009-04-14 18:26:13
C#(CheckBox)風格的轉換位於DirectCast和CType()之間的某處。 DirectCast越來越嚴格,CType與Convert.To更接近(不一樣)。____() – 2009-04-14 18:28:45
Adam Robinson是正確的,也DirectCast
是提供給您。
VB實際上有2個鑄造的概念。
CLR的風格轉換是一個C#用戶就是比較熟悉。這使用CLR類型系統和轉換來執行演員。 VB有DirectCast和TryCast相當於C#強制轉換和作爲運算符分別。
除了CLR類型系統外,VB中的詞彙表還會做額外的工作。它們實際上代表了潛在演員的超集。詞法轉換很容易通過在轉換運算符上查找C前綴來發現:CType,CInt,CString等......如果編譯器不直接知道這些轉換,它們將經歷VB運行時間。運行時間將做的類型系統之上解釋,允許像下面蒙上工作
Dim v1 = CType("1", Integer)
Dim v2 = CBool("1")
DirectCast在編譯時將進行轉換,但只能用來施放引用類型。 Ctype將在運行時執行轉換(比編譯時轉換慢),但對convertng值類型顯然很有用。 在你的情況下,「發件人」是一個引用類型,所以DirectCast將是一條路。
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
的更多的經驗,我在VB中得到少,我發現自己鑄造這樣的控制。我知道這不是你問的,但你可以只是: 如果Me.CheckBoxOfMine.Checked然後... – rvarcher 2009-04-14 20:55:51
@rvarcher:我個人不喜歡VB,我希望我沒有太多的經驗。沒有冒犯,只是我的意見。 – Kredns 2009-04-14 23:53:19