在视觉基础中投射?

我是一个被迫使用VB的C#程序员(呃!!!!)。 我想在一个方法中检查多个控件状态,在C#中这将完成如下:

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

那我怎么能在VB中完成这个呢?

C#:

 (CheckBox)sender 

VB:

 CType(sender, CheckBox) 

VB实际上有2个铸造概念。

  1. CLR风格的铸造
  2. 词汇铸造

CLR样式转换是C#用户更熟悉的内容。 这使用CLR类型系统和转换来执行强制转换。 VB的DirectCast和TryCast分别等同于C#cast和as运算符。

除了CLR类型系统之外,VB中的词法转换还需要额外的工作。 它们实际上代表了潜在演员阵容的超集。 通过在转换操作符上查找C前缀,很容易发现词法转换:CType,CInt,CString等……如果编译器没有直接知道这些转换,它们将经历VB运行时。 运行时将在类型系统之上进行解释,以允许类似以下的强制转换工作

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

Adam Robinson是正确的,也可以使用DirectCast

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