有人可以解释这行代码实际上在做什么。
txtModule.Visible = (cboModule.SelectedIndex = 0)
我希望它将txtModule的visible属性设置为具有SelectedIndex为0的cboModule的布尔结果,但是如果是这样的话,如果是这样的话。
我试着寻找答案,但我不知道这种作业的名称是什么,所以如果你知道这一点,它也会有所帮助。
答案 0 :(得分:2)
与
相同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中,它可能有点令人困惑,因为设置变量并比较它使用相同的运算符。
答案 1 :(得分:0)
Alex K的评论是正确的。您可以更详细地将该语句写为
txtModule.Visible = If(cboModule.SelectedIndex = 0, True, False)
这将完全相同。
答案 2 :(得分:0)
这里的诀窍是=
运算符在VB.Net中有两个不同的含义;它既可以用于相等比较,也可以用于赋值。此外,在许多情况下,可以将赋值作为较大表达式的一部分,使得赋值不要求所分配的变量一直在代码行的左侧。
在这种情况下,我们有两个=
表达式。很清楚第一个表达式(左边的=
)是对布尔txtModule.Visible
变量的赋值,但cboModule.SelectedIndex = 0
表达式不太清楚。在不同的上下文中,这可以是赋值或相等测试。然后,括号的目的是试图澄清表达式是一种比较,可能由习惯于C风格语言的人编写,其中括号通常用于表示条件表达式。然后将比较结果(布尔值)分配给布尔txtModule.Visible
变量。
答案 3 :(得分:0)
真正的答案:
txtModule.Visible = (cboModule.SelectedIndex = 0)
实际上是
Let txtModule.Visible = (cboModule.SelectedIndex = 0)
其中等号符号扮演两个角色。
在第一个角色中,它是Let的语法的一部分,如Let variable = expression
中所示。很少使用Let
,因为随着BASIC的发展,它变成了可选项(参见http://msdn.microsoft.com/en-us/library/aa243390(v=vs.60).aspx)。这就是BASIC(和VB6和VBA)如何执行其赋值语句(参见http://en.wikipedia.org/wiki/Assignment_(computer_science))。
实际上,VB.NET不使用Let
,但在第一个角色中继续使用等号。
在第二个角色中,它是等于运算符,通常等同于C#的==
(但不完全相同,请参阅Object equality behaves different in .NET)
在某些语言中,赋值是一个语句(例如VB.Net),而在其他语言中,赋值是一个运算符(例如C#)。根据上面引用的Wiki页面:“等号作为赋值运算符的使用经常受到批评,因为与平等的冲突是平等的比较。这导致新手在编写代码时产生混淆,甚至经验也会引起混淆程序员在阅读代码时。“显然,Fortran应该受到指责。