2009-04-14 65 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