如果VB.NET的Condition(IIf)不等于C#(?:)

本文关键字:不等于 VB IIf Condition 如果 NET | 更新日期: 2023-09-27 18:01:33

VB.NET中的IIf函数:

IIf(condition As Boolean, TruePart As Object, FalsePart As Object) As Object

精确不等于C#条件运算符(?:(:

condition ? first_expression : second_expression;

当我将一些代码从c#转换到vb.net时,我知道转换后的代码不能正确工作,因为在vb.net中,如果条件在检查条件之前同时计算true和false部分!

例如,C#:

public int Divide(int number, int divisor)
{
    var result = (divisor == 0) 
                 ? AlertDivideByZeroException() 
                 : number / divisor;
    return result;
}

VB。NET:

Public Function Divide(number As Int32, divisor As Int32) As Int32
     Dim result = IIf(divisor = 0, _
                  AlertDivideByZeroException(), _
                  number / divisor)
     Return result
End Function

现在,我的c#代码执行成功,但每次divisor不等于零时,vb.net代码都会同时运行AlertDivideByZeroException()number / divisor

为什么会发生这种情况

如何以及用什么替换VB.net中的c#if条件运算符(?:(

如果VB.NET的Condition(IIf)不等于C#(?:)

在Visual Basic中,相等运算符是=,而不是==。您只需要将divisor == 0更改为divisor = 0

此外,正如Mark所说,您应该使用If而不是IIf。从If:An If operator that is called with three arguments works like an IIf function except that it uses short-circuit evaluation.的文档来看,由于C#使用短路评估,您将希望在VB.

中使用If来实现相同的功能