2013-03-05 62 views
3

在有很多在我的代碼的地方,我有這樣的:避免的try-catch通過的TryParse,而不是解析

try 
{ 
    price = double.Parse(sPrice.Replace(",", "."), CultureInfo.InvariantCulture); 
} 
catch 
{ 
    price = 0; 
} 

我讀的地方,如果異常在try塊拋出,它需要大量的時間被抓住了。

所以,我想使用的TryParse,而不是解析,就像這樣:

if (!double.TryParse(sPrice, out price)) 
{ 
    price = 0; 
} 

這是一個好的做法呢?它會花費更少的時間嗎?

+1

您*可以*自己對其進行基準測試。至於好的做法,好吧。這完全是主觀的,但我更喜歡tryparse方法,我自己。 =) – 2013-03-05 09:27:51

+0

是的,它將確實節省執行時間 – Dreamwalker 2013-03-05 09:28:04

+0

可能重複的[解析訴TryParse](http://stackoverflow.com/questions/467613/parse-v-tryparse) – Habib 2013-03-05 09:29:08

回答

3

是的,TryParse更快。

但是,這聽起來像是一個不成熟的優化,除非你期望Parse被稱爲與許多無效輸入字符串的緊密循環。

您應該選擇不取決於速度,但取決於需求和您期望得到的數據類型。另外,請考慮另一個選項:Convert.ToDouble

+0

你是指過早優化? – 2013-03-05 09:41:35

+0

你怎麼知道它太慢? :) 在大多數情況下,與其餘處理相比,由異常處理引入的開銷可以忽略不計,因此優化代碼的速度是沒有意義的。 IMO的可讀性/易維護性往往是更好的優化目標。 – 2013-03-05 10:02:14

1

兩個好處,我覺得用TryParse

  1. 相比try.. catch...
  2. 你將永遠在你的變量值它是快速的,無論是你想要分配的一個或默認的。因此,一旦傳遞給TryParse,您可以直接使用變量。