在视觉基础中投射?
我是一个被迫使用VB的C#程序员(呃!!!!)。 我想在一个方法中检查多个控件状态,在C#中这将完成如下:
if (((CheckBox)sender).Checked == true) { // Do something... } else { // Do something else... }
那我怎么能在VB中完成这个呢?
C#:
(CheckBox)sender
VB:
CType(sender, CheckBox)
VB实际上有2个铸造概念。
- CLR风格的铸造
- 词汇铸造
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