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

Posted

技术标签:

【中文标题】如果 VB.NET (IIf) 的条件不等于 C# (?:)【英文标题】:If Condition of VB.NET (IIf) is not equal by C# (?:) 【发布时间】:2015-07-07 22:15:43 【问题描述】:

VB.NET 中的IIf function:

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

完全不等于 C# conditional operator (?:):

condition ? first_expression : second_expression;

当我将一些代码从 c# 转换为 vb.net 时,我了解到转换后的代码无法正常工作,因为在 vb.net 中,如果条件在检查条件之前对真假部分都进行了评估!

例如,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# 代码已成功执行,但 vb.net 代码每次 divisor 不等于零时,AlertDivideByZeroException()number / divisor 都运行。

为什么会这样?

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

【问题讨论】:

使用If(...) 而不是IIf(...) IIf 是一个函数,还有一个 Mark 链接到的“新”If 运算符 不完全是重复但很多有趣的信息IIf() vs. If 【参考方案1】:

在 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 来实现相同的功能。

【讨论】:

很抱歉,我确实编辑了它 (==) 是输入错误。

以上是关于如果 VB.NET (IIf) 的条件不等于 C# (?:)的主要内容,如果未能解决你的问题,请参考以下文章

VB 到 C# 函数

Nz 和 IIF 的替代方案(为空)

在vb.net中使用c#条件运算符[重复]

报表表格控件条件设置

VB.NET 中的合并运算符和条件运算符 [重复]

在 ASP.Net 网站项目中混合 VB.Net 和 C# 代码?