在Perl(和其他语言)中,条件三元运算符可以这样表示:
my $foo = $bar == $buz ? $cat : $dog;
在VB.NET中是否有类似的操作符?
在Perl(和其他语言)中,条件三元运算符可以这样表示:
my $foo = $bar == $buz ? $cat : $dog;
在VB.NET中是否有类似的操作符?
当前回答
If(<expression>, <expressionIfNothing>)
如果<表达式>计算为一个引用或Nullable值,该值不是Nothing,则函数返回该值。否则,它计算并返回<expressionIfNothing>(智能感知)
这对于检查特定值是否存在以及是否替换它非常有用。
例子:
If(cat, dog)
在这里,如果cat不为null,它将返回cat。如果为空,则返回dog。在这种情况下,大多数情况下您将使用三元运算符。然而,如果你不想返回你正在测试的值,你将不得不使用这个代替:
If(condition, cat(true), dog(false))
其他回答
取决于版本。VB中的If运算符。NET 2008是一个三元运算符(以及一个空合并运算符)。这是刚刚推出的,在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)
郑重声明,下面是If和IIf的区别:
IIf(条件,真部分,假部分):
这是旧的VB6/VBA函数 该函数总是返回一个对象类型,所以如果你想使用所选对象的方法或属性,你必须使用DirectCast或CType或Convert重新转换它。函数恢复到原始类型 正因为如此,如果真部分和假部分是不同类型的,就没有关系,结果只是一个对象
If(条件,真部分,假部分):
This is the new VB.NET Function The result type is the type of the chosen part, true-part or false-part This doesn't work, if Strict Mode is switched on and the two parts are of different types. In Strict Mode they have to be of the same type, otherwise you will get an Exception If you really need to have two parts of different types, switch off Strict Mode (or use IIf) I didn't try so far if Strict Mode allows objects of different type but inherited from the same base or implementing the same Interface. The Microsoft documentation isn't quite helpful about this issue. Maybe somebody here knows it.
iif在VB中一直是可用的,甚至在VB6中也是如此。
Dim foo as String = iif(bar = buz, cat, dog)
它本身并不是一个真正的运算符,而是Microsoft中的一个函数。VisualBasic名称空间。
If()是最接近的等价物,但如果关闭了Option Strict,则要注意隐式转换。
例如,如果你不小心,你可能会尝试这样的事情:
Dim foo As Integer? = If(someTrueExpression, Nothing, 2)
foo的值为0!
我认为?在c#中等价的运算符反而会导致编译失败。
If(<expression>, <expressionIfNothing>)
如果<表达式>计算为一个引用或Nullable值,该值不是Nothing,则函数返回该值。否则,它计算并返回<expressionIfNothing>(智能感知)
这对于检查特定值是否存在以及是否替换它非常有用。
例子:
If(cat, dog)
在这里,如果cat不为null,它将返回cat。如果为空,则返回dog。在这种情况下,大多数情况下您将使用三元运算符。然而,如果你不想返回你正在测试的值,你将不得不使用这个代替:
If(condition, cat(true), dog(false))