Answers:
取决于版本。在If
2008年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