Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 下面这行代码能解释一下吗_Vb.net - Fatal编程技术网

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)
那样清晰,其中赋值和相等是不同的运算符。