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

问题描述 投票:0回答:5

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

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

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

vb.net operators conditional-operator short-circuiting
5个回答
670
投票

取决于版本。 VB.NET 2008 中的

If
运算符是一个三元运算符(也是一个空合并运算符)。这是刚刚推出的,2008 年之前是不可用的。以下是更多信息:Visual Basic If 公告

示例:

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

[编辑]

2008 年之前,它是

IIf
,其工作方式与上面描述的
If
运算符几乎相同。

示例:

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

85
投票

iif 在 VB 中一直可用,甚至在 VB6 中也是如此。

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

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


28
投票

If()
是最接近的等价物,但是如果您设置了 Option Strict off,请注意会发生
转换。

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

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

将给

foo
一个值
0

我认为 C# 中的

?
运算符等效项会编译失败。


4
投票

仅供记录,这是 IfIIf 之间的区别:

IIf(条件,真部分,假部分)

  • 这是旧的VB6/VBA函数
  • 该函数始终返回基本对象类型,因此如果您想使用所选对象的方法或属性,您必须使用 DirectCast 或 CType 或 Convert.* 函数将其重新转换为其原始类型
  • 因此,如果 true-part 和 false-part 是不同类型也没有关系,结果只是一个基本对象

If(条件,真部分,假部分)

  • 这是新的 VB.NET 函数
  • 结果类型是所选部分的类型,true-part 或 false-part
  • 如果打开严格模式并且两个部件属于不同类型,则此方法不起作用。在严格模式下它们必须是相同的类型,否则你会得到一个异常
  • 如果您确实需要有两个不同类型的部分,请关闭严格模式(或使用 IIf)
  • 到目前为止,我还没有尝试严格模式是否允许不同类型但从相同基础继承或实现相同接口的对象。 Microsoft 文档对这个问题没有太大帮助。也许这里有人知道。

0
投票
If(<expression>, <expressionIfNothing>)

如果

<expression>
计算结果为非 Nothing 的引用或 Nullable 值,则该函数返回该值。否则,它会计算并返回
<expressionIfNothing>
(智能感知)


这对于检查特定值是否存在以及如果不存在则替换它很有用。

示例:

If(cat, dog)

这里,如果cat不为null,就会返回cat。如果为空,则返回dog。大多数时候,您将在这种情况下使用三元运算符。但是,如果您不想返回正在测试的值,则必须使用它:

If(condition, cat(true), dog(false))
© www.soinside.com 2019 - 2024. All rights reserved.