2014-02-26 37 views
2

當使用char數據類型的其它方法有什麼理由應該使用int.TryParseint.TryParse與用於確定一個char包含一個int

int.TryParse(inputChar.ToString(), NumberStyles.Integer, 
          CultureInfo.InvariantCulture, out curNum) 

inputChar - '0' 

和檢查,如果結果在0-9之間?

+2

能否請你澄清問題的安全方面 - 因爲它讀取,這是很難理解對方的問題 – Charleh

+0

那麼,關於什麼時候你沒有'char',而是一個包含值'192384''的字符串?你會如何減去'0'?此外,雖然這可能在「我們的」文化環境中起作用,但關於不同文化和字符集的事情是,「0」的字符代碼在所有情況下可能不會小於每個其他數字的字符代碼。 –

+0

哦,我明白了。你在談論的情況是它只是一個「字符」而不是一個字符串。 –

回答

-1

這只是關於代碼清晰度。 int.TryParse明確表示它的意圖 - 如果可能,我想將字符串解析爲數字。這是相對快速和安全的。

如果你發現自己陷入TryParse s,你總是可以編寫自己的解析。在某些情況下,它可以節省大量的時間。例如,在解析DBF時,我已經完成了這樣的實現,否則會導致從解析字節到字符串以及字符串到int的大量開銷。直接從流轉換爲int節省了大量的分配和時間。

畢竟,如果你不想使用內置方法,爲什麼要使用.NET呢?爲什麼不把所有東西寫在機器代碼中:))

+0

現在問題已經澄清,我願意並且能夠刪除我的評論:-) –

1

如果你想檢查一個char數字你應該使用Char.IsDigit

if (Char.IsDigit(inputChar)) 
{ 
    // ... 
} 
+0

看起來像包括Ascii'0-9'之外的其他unicode字符,所以我想這取決於OP要求的內容。 –

+0

@MartinSmith:通常它只是用[拉丁-1](http://msdn.microsoft.com/zh-cn/library/ms537495(v = 0))檢查'c> ='0'&& c <='9' vs.85)的.aspx)。 –

+0

'Char.IsDigit('5')'例如是真的。沒有測試過與問題中顯示的'int.parse'是否相同的語義。 –

0

嘛,兩個原因總是使用TryParse

  1. 使用經過良好測試的庫函數總是比重新發明車輪更好。
  2. 美國以外的世界不會說「ASCII」 - 因此可能會出現這樣的情況,即0的字符代碼對於數字來說不是最小的。在這種情況下,'9' - '0' != 9;。這是一個可能是。而且因爲我懶得谷歌這個我在使用TryParse :-)
+0

這裏的一些例子http://stackoverflow.com/a/16621778/73226 –

+1

@MartinSmith我想知道:如何能你所引用的問題被接受的答案是1068次,但是寫出答案的人只有6371的聲望? –

+1

代表帽。可能這1000票中的很多都是在同一天。 –