Answers:
取决于版本。在If2008年VB.NET运算符是一个三元操作(以及空聚结操作者)。这是刚刚介绍的,在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)
Iif始终返回type的对象Object,而If(bool, obj, obj)允许使用选项strict on进行类型检查。(Dim var As Integer = Iif(true, 1, 2)不会编译严格选项,因为您可以很容易地编写Dim var As Integer = Iif(true, new Object(), new Object())。但是可以严格编译选项Dim var As Integer = If(true, 1, 2),因为它会检查返回的类型。)
iif一直在VB中可用,即使在VB6中也是如此。
Dim foo as String = iif(bar = buz, cat, dog)
这样,它不是一个真正的运算符,而是Microsoft.VisualBasic命名空间中的一个函数。
If()是最接近的等效项,但是请注意,如果您已将“ Option Strict off”设置为“ off”,则会进行隐式转换
例如,如果您不小心,则可能会尝试以下操作:
Dim foo As Integer? = If( someTrueExpression, Nothing, 2)
将“ foo”的值设为0!
我觉得 '?' C#中等效的运算符将导致编译失败
Dim foo As Integer? = If( someTrueExpression, New Integer?, 2)。
Option Strict On。原因是Nothing在VB.NET中等效于C#default(T)而不是null。
Integer?它意味着它可以为空-参见stackoverflow.com/questions/3628757/make-an-integer-null