2010-10-18 73 views
14

可能重複:
Whats the main difference between int.Parse() and Convert.ToInt32更好地利用int.Parse或Convert.ToInt32

傢伙您好,我想知道什麼是PRO和使用 Convert.ToInt32 VS的利弊int.Parse。 感謝您的支持!

這裏我使用

  int myPageSize = Convert.ToInt32(uxPageSizeUsersSelector.SelectedValue); 

      int myPageSize = int.Parse(uxPageSizeUsersSelector.SelectedValue); 

我也發現了這篇文章語法的例子,也許可以幫助一個討論 http://dotnetperls.com/int-parse http://aspdotnethacker.blogspot.com/2010/04/difference-between-int32parsestring.html http://aspdotnethacker.blogspot.com/p/visual-studio-performance-wizard.html

+0

這兩種方法都不如定製的int解析代碼,因爲解析中必須處理空格, - hyphones,new lines等。 – 2014-08-25 10:07:01

回答

25

Convert.ToInt32是處理實現IConvertible,並且可以被轉換爲int任何對象。另外,Convert.ToInt32返回0null,而int.Parse返回ArgumentNullException

int.Parse是專門用於處理字符串。

事實證明,string類型的IConvertible實現僅在其ToInt32方法中使用int.Parse

那麼有效,如果你在一個叫stringConvert.ToIn32,你調用int.Parse,只是稍微開銷(一對夫婦更多的方法調用)。

對於從string到某種原始類型(它們都稱爲Parse)的任何轉換都是如此。因此,如果您處理的是強類型的string對象(例如,您正在解析文本文件),我推薦Parse,因爲它更直接。

轉換任意對象(例如由某個外部庫返回給您)是我選擇使用Convert類的場景。

2

轉換接口是一個更通用的一。最終的結果應該是相同的。

在內部,它只是調用int.Parse:

public static int ToInt32(String value) { 
    if (value == null) 
     return 0; 
    return Int32.Parse(value, CultureInfo.CurrentCulture); 
} 

上面的代碼是從參考源。

3

我無法根據性能進行回答,但我首選的方法總是int.tryparse(mystring,out myint),因爲這樣會產生一個乾淨的故障,您可以在程序流中進行測試(而不是嘗試try/catch) 。

+0

這真的取決於你想要做什麼。如果你真的需要解析成功,或者你知道它是一個數字的有效表示,那麼使用int.Parse是完全有效的。當TryParse在這種情況下失敗時,你會做什麼?你只會拋出另一個異常。 – 2010-10-18 16:25:48

+1

在我的使用中,會拋出* one *異常,這對我的應用程序來說是一個有意義的異常 - 在您的使用中,會拋出兩個或更多異常,int.Parse拋出一個或多個異常並由您捕獲以及您爲拋出錯誤而添加上下文的人。 – Moo 2010-10-19 08:34:58

17

沒有太大的區別。這是msdn上的報價。

基本上Convert類使它更容易在所有的基類 類型之間轉換 。

下面的Convert.ToInt32(String, IFormatProvider)調用 Int32.Parse。所以唯一的區別是 ,如果一個空字符串傳遞給 轉換它返回0,而 Int32.Parse拋出一個 ArgumentNullException。 MSDN