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

时间:2009-02-23 03:17:30

标签: vb.net operators conditional-operator short-circuiting

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

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

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

4 个答案:

答案 0 :(得分:549)

取决于版本。 VB.NET 2008中的If运算符是三元运算符(以及空合并运算符)。这是刚刚推出的,在2008年之前没有这个。以下是一些更多信息:Visual Basic If announcement

示例:

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

[编辑]

在2008年之前它是“IIf”,其工作方式几乎与上述的If运算符相同。

示例:

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

答案 1 :(得分:74)

iif一直在VB中可用,即使在VB6中也是如此。

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

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

答案 2 :(得分:23)

如果你设置了“Option Strict off”,那么()是最接近的等价物但提防正在进行隐式转换

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

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

将“foo”赋值为0!

我认为'?' C#中的运算符等同于编译失败

答案 3 :(得分:0)

仅作记录,这是 If IIf 之间的区别:

IIf(条件,正确部分,错误部分)

  • 这是旧的VB6 / VBA功能
  • 该函数始终返回Object类型,因此,如果要使用所选对象的方法或属性,则必须使用DirectCast或CType或Convert。*函数将其重新广播为原始类型
  • 因此,如果true部分和false部分的类型不同,那么无论如何结果都只是一个对象

如果(条件,正确部分,错误部分)

  • 这是新的VB.NET功能
  • 结果类型是所选部分的类型,正确部分或错误部分
  • 如果启用了“严格模式”并且两个部分的类型不同,则此方法不起作用。在严格模式下,它们必须具有相同的类型,否则您将获得异常
  • 如果您确实需要两个不同类型的部件,请关闭“严格模式”(或使用IIf)
  • 到目前为止,如果严格模式允许使用不同类型但从相同基础继承或实现相同接口的对象,我还没有尝试过。 Microsoft文档对于此问题不是很有帮助。也许这里有人知道。