2012-01-03 46 views
1

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

+0

是的,这是正确的。 'IIF'只是一个函数 - 函数总是在执行之前评估它们的参数。您链接的MSDN页面上的*备注/备注*甚至明确地说明了这一点。你的问题是什么? – Amadan 2012-01-03 11:39:52

+1

[为什么不能作为IIF函数工作,但会作为IF语句?](http://stackoverflow.com/questions/3701787/why-wont-this-work-as-an-iif - 功能 - 但意志-AS-AN-if语句) – Curt 2012-01-03 11:54:32

回答

3

摘录您链接到:

至于准备参数列表的一部分呼叫IIf,Visual Basic编译器调用每个表达式中的每个函数。这意味着如果另一个参数是由Expression选择的,则不能依赖不被调用的特定函数。

这可能是一个非常意外的行为,设计可能有缺陷,但基本上你认为是正确的。

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,如果它无法解析的数量。