【问题标题】:What is the return value of an assignment in vb.net?vb.net 中赋值的返回值是多少?
【发布时间】:2023-03-25 00:36:01
【问题描述】:

我做作业的返回值是多少?

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

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

对于第二个代码块,我知道运算符 = 没有定义为任何类型 updates 是...即它认为这是一个比较,而不是一个赋值。

所以补充一下我的问题,为什么它会这样工作?是不是因为 vb.net 重载了符号= 有两种含义(赋值和比较)?

【问题讨论】:

    标签: vb.net return-value assignment-operator


    【解决方案1】:

    在 Visual Basic 中,a = b = 3 转换为有些出乎意料的东西。由于 VB 没有 == 运算符,而是使用 = 进行赋值和相等比较,因此上述表达式归结为:

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

    【讨论】:

      【解决方案2】:

      关于分配在 .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 的语法相同(或尽可能接近),我怀疑这种行为被继承了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-06
        • 2010-12-14
        • 1970-01-01
        • 1970-01-01
        • 2013-09-18
        • 2017-07-28
        • 2013-04-08
        • 1970-01-01
        相关资源
        最近更新 更多