可以解释以下代码行

时间:2014-11-18 14:01:27

标签: vb.net

有人可以解释这行代码实际上在做什么。

txtModule.Visible = (cboModule.SelectedIndex = 0)

我希望它将txtModule的visible属性设置为具有SelectedIndex为0的cboModule的布尔结果,但是如果是这样的话,如果是这样的话。

我试着寻找答案,但我不知道这种作业的名称是什么,所以如果你知道这一点,它也会有所帮助。

4 个答案:

答案 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应该受到指责。