IIf函数解析

时间:2012-01-03 11:37:03

标签: .net vb.net parsing

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

2 个答案:

答案 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.