Vb.net 下面这行代码能解释一下吗
有人能解释一下这行代码实际上在做什么吗Vb.net 下面这行代码能解释一下吗,vb.net,Vb.net,有人能解释一下这行代码实际上在做什么吗 txtModule.Visible = (cboModule.SelectedIndex = 0) 我希望它能将txtModule的visible属性设置为cboModule的boolean结果,其SelectedIndex为0,但情况确实如此,如果是这样,原因何在 我试着寻找这个问题的答案,但我不知道这种作业叫什么,所以如果你知道,它也会很有帮助。与 If cboModule.SelectedIndex = 0 Then txtModule.V
txtModule.Visible = (cboModule.SelectedIndex = 0)
我希望它能将txtModule的visible属性设置为cboModule的boolean结果,其SelectedIndex为0,但情况确实如此,如果是这样,原因何在
我试着寻找这个问题的答案,但我不知道这种作业叫什么,所以如果你知道,它也会很有帮助。与
If cboModule.SelectedIndex = 0 Then
txtModule.Visible = True
Else
txtModule.Visible = False
End If
由于将cboModule.SelectedIndex与0进行比较会返回一个布尔值,因此您也可以这样做
Dim b As Boolean
b = (cboModule.SelectedIndex = 0)
txtModule.Visible = b
在VB中,由于设置变量和比较变量都使用相同的运算符,因此可能会有点混淆。Alex K的评论是正确的。您可以更详细地将该语句编写为
txtModule.Visible = If(cboModule.SelectedIndex = 0, True, False)
在VB.Net中,
=
操作符有两种不同的含义;它既可用于相等比较,也可用于赋值。此外,在许多情况下,赋值可以作为更大表达式的一部分进行,这样赋值就不要求被赋值的变量一直位于代码行的左侧
在本例中,我们有两个=
表达式。很明显,第一个表达式(左侧的=
是对布尔txtModule.Visible
变量的赋值,但是cboModule.SelectedIndex=0
表达式不太清晰。在不同的上下文中,这可能是赋值或相等测试。括号的目的是试图澄清表达式是一种比较,可能是由习惯于C风格语言的人编写的,在C风格语言中,括号通常用于表示条件表达式。然后将比较结果(布尔值)分配给布尔值txtModule.Visible
变量 真正的答案是:
txtModule.Visible = (cboModule.SelectedIndex = 0)
实际上是
Let txtModule.Visible = (cboModule.SelectedIndex = 0)
其中等号扮演两个角色
在第一个角色中,它是Let语法的一部分,如Let variable=expression
。Let
很少使用,因为随着BASIC的发展,它变成了可选的(请参阅)。这就是BASIC(以及VB6和VBA)执行赋值语句的方式(请参阅)
实际上,VB.NET不使用Let
,但在第一个角色中使用等号的情况仍在继续
在第二个角色中,它是相等运算符,通常相当于C#的=
(但不完全相同,请参见)
在某些语言中,赋值是一个语句(如VB.Net),而在另一些语言中,赋值是一个运算符(如C#)。根据上面引用的Wiki页面:“使用等号作为赋值运算符经常受到批评,因为它与等号作为相等比较的冲突。这导致新手在编写代码时感到困惑,甚至有经验的程序员在阅读代码时也感到困惑。”显然,Fortran是罪魁祸首。您只是简单地指定了表达式的结果
(cboModule.SelectedIndex=0)
是一个布尔表达式,它将根据索引是否等于0返回true或false,然后将生成的布尔值指定给Visible
属性。谢谢,我担心它不会总是像我预期的那样工作,例如,将cboModule.SelectedIndex的值设置为0。这非常好,尽管正如下面所指出的,它不如C#等价的txtModule.Visible=(cboModule.SelectedIndex==0)
那样清晰,其中赋值和相等是不同的运算符。