加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

vb.net – 什么时候执行比较而不是赋值?

发布时间:2020-12-17 07:23:08 所属栏目:百科 来源:网络整理
导读:在VB.NET中,没有用于比较的==运算符,因此=运算符用于此目的以及赋值.我有一个函数,我希望它返回比较的布尔结果,而不将结果存储在变量中: Private Function foo() As Boolean Dim bar As Integer = 1 Return bar = 2End Function 返回:False 好吧,但是酒吧
在VB.NET中,没有用于比较的==运算符,因此=运算符用于此目的以及赋值.我有一个函数,我希望它返回比较的布尔结果,而不将结果存储在变量中:

Private Function foo() As Boolean
    Dim bar As Integer = 1
    Return bar = 2
End Function

返回:False

好吧,但是酒吧的价值是什么?

Private Function foo() As KeyValuePair(Of Boolean,Integer)
    Dim bar As Integer = 1
    Return New KeyValuePair(Of Boolean,Integer)(bar = 2,bar)
End Function

返回:False,1

看起来=将在语句上下文要求时执行比较,但这是否有保证?也就是说,在这种情况下,我可以确定bar永远不会设置为2吗?

此外,我知道VB.NET不允许链接内联分配,这是may be for the best.这奇怪的行为是否导致我应该注意的任何其他怪癖?

解决方法

你不能在VB中进行内联赋值,Assignment是一个明确的声明:

[Let] <<target-reference>> = <<value-expression>>

Let是可选的和隐含的,几乎不再使用.可以用来区分[Let]命令和等式测试的一般规则是,对于Let,语句中的目标引用之前不能有其他关键字. AFAIK,在=作为相等测试的所有情况下,在语句中都有一个或多个其他关键字.

在您的第一个示例中,关键字Return在您的=之前,因此它是一个相等测试,而不是一个赋值.

在你的第一个例子中,你可以做到:

Return 2

要么

bar = 2
Return bar

至于你的问题“好吧,但是酒吧的价值是什么?”,酒吧仍然等于一个.

=在VB中没有怪??癖.它完全按照记录的方式工作,并且始终具有(包括其前身BASIC,直到1968年).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读