2012-01-03 101 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,如果它無法解析的數量。