繁体   English   中英

vb.net中作业的返回值是多少?

[英]What is the return value of an assignment in vb.net?

当我完成作业时,返回值是多少?

例如,我可以这样做吗? (即赋值返回指定的值)

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的比较结果分配给...当然是编译器错误。

对于第二个代码块,我得到operator =没有为什么类型updates定义...即它认为它是一个比较,而不是一个赋值。

那么为了补充我的问题,为什么它会这样工作呢? 是仅仅因为vb.net重载符号=有两个含义(赋值和比较)?

关于如何在.NET中进行分配。

这实际上是关于赋值如何在VB中工作,而不是在.NET中。

这在VB.Net中不起作用。 VB.Net中的=运算符仅“将其右侧的值赋予其左侧的变量或属性”。

当我完成作业时,返回值是多少?

如上面的语句所示,赋值运算符不会在VB.Net中返回值

请注意,这与其他.NET语言不同。 例如,在C#中,赋值=运算符执行您正在描述的内容,并“将其右侧操作数的值存储在由其左侧操作数表示的存储位置,属性或索引器中, 并将值返回为结果 。“

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的语法相同(或尽可能接近),我怀疑这种行为是继续进行的。

在Visual Basic中, a = b = 3转换为某种意外的东西。 由于VB没有==运算符,而是使用=进行赋值和相等比较,上面的表达式归结为以下内容:

If b = 3 Then
    a = True
Else
    a = False
End If

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM