2009-07-03 63 views
3

我對Integer.TryParse()函數的理解是,它試圖從傳入的字符串中解析整數,如果解析失敗,結果整數將保持原來的狀態。爲什麼Integer.TryParse在失敗時將結果設置爲零?

我爲-1的默認值,我想留在-1,如果解析失敗的整數。然而,未能解析的Integer.TryParse()函數將此默認值更改爲零。

Dim defaultValue As Integer = -1 
Dim parseSuccess As Boolean = Integer.TryParse("", defaultValue) 
Debug.Print("defaultValue {0}", defaultValue) 
Debug.Print("parseSuccess {0}", parseSuccess) 

我意料的是,上面的代碼段應該輸出:

defaultValue -1 
parseSuccess False 

然而而是輸出:

defaultValue 0 
parseSuccess False 

是我的理解是否正確?

回答

20

這是一個out參數,這意味着它必須必須由該方法設置(除非它拋出一個異常) - 該方法無法看到原始值是什麼。

的選擇將是使之成爲ref參數,只設置成功,但是這意味着迫使呼叫者初始化變量第一,即使他們沒有希望這種行爲。

你可以儘管編寫自己的實用方法:

public bool TryParseInt32(string text, ref int value) 
{ 
    int tmp; 
    if (int.TryParse(text, out tmp)) 
    { 
     value = tmp; 
     return true; 
    } 
    else 
    { 
     return false; // Leave "value" as it was 
    } 
} 
3

你是對的,TryParse在失敗時使用0。 (MSDN很清楚地說明了這一點) 但是,如果這是你想要的,你可以檢查paseSuccess並返回你的默認值。

相關問題