执行作业时的返回值是什么?
例如,我可以这样做吗? (即赋值返回指定的值)
Dim a As Integer = 1
Dim b As Integer = 2
a = b = 3
今天我写这段代码时出现了问题:
Dim updates = GetUpdates()
While updates.Count > 0
Foo.ApplyUpdates(updates)
updates = GetUpdates()
End While
我希望我能用这种方式写出来......
While (updates = GetUpdates).Count > 0
Foo.ApplyUpdates(updates)
End While
我知道它不是那么干净......(我完全没有声明updates
)但它让我对.NET中的赋值如何工作感到好奇......它是一个具有返回值的函数吗?如果是这样......它会返回什么?
修改
我尝试了第一块代码。看起来编译器将其解释为将b和3的比较结果分配给...当然是编译器错误。
对于第二个代码块,我得到的运算符=
没有定义类型updates
是什么......即它认为它是比较,而不是赋值。
所以要添加到我的问题,为什么它会这样工作?是不是因为vb.net重载符号=
有两个含义(赋值和比较)?
答案 0 :(得分:8)
关于如何在.NET中进行作业。
这实际上是关于赋值如何在VB中工作,而不是在.NET中。
这在VB.Net中不起作用。 VB.Net中的= Operator仅“将其权利值赋予其左侧的变量或属性。”
执行作业时的返回值是什么?
如上面的语句所示,赋值运算符不会在VB.Net 中返回值。
请注意,这与其他.NET语言不同。例如,在C#中,赋值= Operator执行您所描述的内容,并“将其右侧操作数的值存储在由其左侧操作数和返回值作为结果。“
Dim a As Integer
Dim b As Integer
a = b = 3
请注意,在指定Option Strict
的情况下,这实际上是一个错误:“Option Strict On禁止从'Boolean'到'Integer'的隐式转换。”
这是因为VB.Net认为这是两个操作 - 它基本上是在尝试:
Dim a As Integer
Dim b As Integer
Dim temp as Boolean
temp = (b = 3)
a = temp
所以要添加到我的问题,为什么它会这样工作?是不是因为vb.net重载符号=有两个含义(赋值和比较)?
嗯,这就是语言的设计方式。我怀疑你是正确的,因为相同的运算符(=)被用作赋值,并且比较是为什么用这种方式制作VB的原因。但是,最初的VB语言是这样的,为了保持VB.Net的语法相同(或尽可能接近),我怀疑这种行为是继续发展的。
答案 1 :(得分:4)
在Visual Basic中a = b = 3
转换为某种意外的东西。由于VB没有==
运算符,而是使用=
进行赋值和相等比较,因此上面的表达式归结为:
If b = 3 Then
a = True
Else
a = False
End If