2008-08-20 69 views
13

在.Net中,您可以使用<datatype>.parseConvert.To<DataType>將字符串值讀入另一種數據類型。.Net解析與轉換

我並不熟悉解析和轉換的基本原理,所以當被問及哪一個更好/更快/更合適時,我總是處於虧損狀態。

那麼 - 在哪種情況下哪種方式最好?

回答

15

Convert.ToXXX()方法是,可能是正確的或相似類型的對象,而.Parse().TryParse()是專門爲字符串:

//o is actually a boxed int 
object o = 12345; 

//unboxes it 
int castVal = (int) 12345; 

//o is a boxed enum 
object o = MyEnum.ValueA; 

//this will get the underlying int of ValueA 
int convVal = Convert.ToInt32(o); 

//now we have a string 
string s = "12345"; 

//this will throw an exception if s can't be parsed 
int parseVal = int.Parse(s); 

//alternatively: 
int tryVal; 
if(int.TryParse(s, out tryVal)) { 
    //do something with tryVal 
} 

如果用優化標誌的TryParse編譯非常快 - 這是最好的從字符串中獲取數字的方法。但是,如果您有一個對象可能是一個int或可能是一個字符串Convert.ToInt32更快。

1

還有DirectCast方法,只有在您確定該對象的類型時才應使用該方法。它速度更快,但沒有做適當的檢查。當我知道每列的類型時,我從鬆散類型的DataTable中提取值時使用DirectCast。

1

如果你需要速度,我敢肯定直接投射是最快的方法。這就是說,我通常使用.Parse或.TryParse,因爲它似乎使事情變得更容易閱讀,並且以更可預測的方式行事。

轉換實際上是調用解析引擎蓋,我相信。所以這裏幾乎沒有什麼區別,而且它似乎只是個人品味的問題。

3

我是TryParse的忠實粉絲,因爲它可以爲您節省很多頭痛的錯誤捕捉,當有可能您要分析的值不是合適的類型。

我的訂單通常是:

  • 解析(如果我可以肯定的值將是正確的類型,我也盡力確保本)
  • 的TryParse(如果我不能肯定,這恰好每當用戶輸入的參與,或從系統輸入你無法控制)
  • 轉換(我認爲自從我開始使用解析和的TryParse我沒有使用過,但我可能是錯的)