如果 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# (?:)的主要内容,如果未能解决你的问题,请参考以下文章