当前位置:  开发笔记 > 编程语言 > 正文

VB.NET中是否有条件三元运算符?

如何解决《VB.NET中是否有条件三元运算符?》经验,为你挑选了3个好方法。

在Perl(和其他语言)中,条件三元运算符可以表示如下:

my $foo = $bar == $buz ? $cat : $dog;

VB.NET中是否有类似的运算符?



1> Beep beep..:

取决于版本.在If2008年VB.NET运算符是一个三元操作(以及空聚结操作者).这是刚刚推出的,在2008年之前没有这个.这里有一些更多的信息: Visual Basic如果公告

例:

Dim foo as String = If(bar = buz, cat, dog)


... Iif()作为一个函数的重要区别是,总是评估结果和替代,而新的If只评估其中一个.
在2008年之前,它是IIf,它几乎与链接中描述的If运算符相同.
另一个重要的区别:`Iif`总是返回一个类型为`Object`的对象,而`If(bool,obj,obj)`允许使用option strict on进行类型检查.(`Dim var As Integer = Iif(true,1,2)`将无法使用option strict编译,因为您可以轻松地编写`Dim var As Integer = Iif(true,new Object(),new Object()你可以写'Dim var As Integer = If(true,1,2)`with option strict on,因为它会检查返回的类型.)
我是一个巨大的C家伙,但我发现这种语法比传统的三元运算符更清晰.
这是什么意思?如果(condition,true-part,false-part).我可以举个仪式吗?

2> Kris Erickso..:

即使在VB6中,iif也一直在VB中可用.

Dim foo as String = iif(bar = buz, cat, dog)

它不是真正的运算符,而是Microsoft.VisualBasic命名空间中的函数.


很高兴对所有VB程序员进行分类;-)并且还有IsNot和OrElse的快捷方式,因此VB确实支持短路评估.
虽然Iif只接近三元运算符 - 这意味着你不能在If Then Else(或三元运算符)的每个条件下使用它.例如,Value = Iif(1 = 1,0,1/0)会爆炸,但Value = If(1 = 1,0,1/0)不会......
VB不支持短路评估(AndAlso运算符除外),因此VB程序员并不真正期望他们可以安全地评估半个操作.但是要点,iif也是一个黑客功能,为了向后兼容而放置,否则它将是一个真正的运营商.
正如我所说,它不是一个真正的运算符,并且vb6不支持短路评估,所以它总是评估所有在线操作.

3> unnknown..:

如果()是最接近的等价物,但如果设置了"Option Strict off",请注意隐式转换

例如,如果您不小心,可能会尝试尝试以下方法:

Dim foo As Integer? = If( someTrueExpression, Nothing, 2)

将"foo"赋值为0!

我觉得 '?' 在C#中等效的运算符将导致编译失败


为了完整起见,编写该表达式的更好方法是"Dim foo As Integer?= If(someTrueExpression,New Integer?,2)`.
请注意,"Option Strict On"也会发生这种情况.原因是VB.NET中的"Nothing"等同于C#的`default(T)`而不是`null`.
推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有