IIf函数解析
问题描述:
IIf函数在评估表达式时分析真实部分和假部分我是否缺少任何东西?试试这个声明,让我知道!IIf函数解析
例子:
Dim sample = ""
Dim result = IIf(String.IsNullOrWhiteSpace(sample), 0, Integer.Parse(sample))
Exception = "Input string was not in a correct format."
修复:从MSDN文档
Dim result = Integer.Parse(IIf(String.IsNullOrWhiteSpace(sample), 0, sample))
http://msdn.microsoft.com/en-us/library/27ydhh0d(v=VS.71).aspx
答
摘录您链接到:
至于准备参数列表的一部分呼叫IIf,Visual Basic编译器调用每个表达式中的每个函数。这意味着如果另一个参数是由Expression选择的,则不能依赖不被调用的特定函数。
这可能是一个非常意外的行为,设计可能有缺陷,但基本上你认为是正确的。
答
你是对的,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,如果它无法解析的数量。
是的,这是正确的。 'IIF'只是一个函数 - 函数总是在执行之前评估它们的参数。您链接的MSDN页面上的*备注/备注*甚至明确地说明了这一点。你的问题是什么? – Amadan 2012-01-03 11:39:52
[为什么不能作为IIF函数工作,但会作为IF语句?](http://*.com/questions/3701787/why-wont-this-work-as-an-iif - 功能 - 但意志-AS-AN-if语句) – Curt 2012-01-03 11:54:32