我是一个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