IIf函数在计算表达式时解析了true部分和false部分。我错过了什么吗?试试这个声明,让我知道!!
示例:
Dim sample = ""
Dim result = IIf(String.IsNullOrWhiteSpace(sample), 0, Integer.Parse(sample))
Exception = "Input string was not in a correct format."
修正:
Dim result = Integer.Parse(IIf(String.IsNullOrWhiteSpace(sample), 0, sample))
http://msdn.microsoft.com/en-us/library/27ydhh0d(v=VS.71).aspx
答案 0 :(得分:3)
摘自您链接到的MSDN文档:
作为为IIf调用准备参数列表的一部分, Visual Basic编译器调用每个表达式中的每个函数。这意味着如果Expression选择了另一个参数,则不能依赖于未调用的特定函数。
这可能是相当意外的行为,设计可能存在缺陷,但基本上你所假设的证明是正确的。
答案 1 :(得分:3)
你是正确的,Iif
评估它的所有参数。它只是一个功能,所以它无法避免。
但是,VB.net也有If
运营商一段时间了。它表面上看起来像Iif
,但由于它内置于语言中,因此它不受函数的限制。它可以短路 - 只有条件和正确的表达式将被评估。所以,实际上,它更像是C#的?:
运营商。
result = If(String.IsNullOrWhiteSpace(sample), 0, Integer.ParseInt(sample))
或者,在这种情况下,您可以选择
Dim result as Integer
Integer.TryParse(sample, result)
如果它无法解析数字,它会将result
设置为0.