479

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

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

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

4

5 回答 5

643

取决于版本。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)
于 2009-02-23T03:46:40.453 回答
81

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

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

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

于 2009-02-23T04:25:19.987 回答
24

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

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

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

将给出foo一个值0

我认为?C# 中的等效运算符会导致编译失败。

于 2012-08-16T15:50:32.657 回答
3

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

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

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

如果(条件,真部分,假部分)

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

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


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

例子:

If(cat, dog)

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

If(condition, cat(true), dog(false))
于 2022-01-11T21:01:11.517 回答