解析()和TryParse()有什麼區別?解析訴TryParse
int number = int.Parse(textBoxNumber.Text);
// The Try-Parse Method
int.TryParse(textBoxNumber.Text, out number);
是否存在某種形式的錯誤檢查,如Try-Catch Block?
解析()和TryParse()有什麼區別?解析訴TryParse
int number = int.Parse(textBoxNumber.Text);
// The Try-Parse Method
int.TryParse(textBoxNumber.Text, out number);
是否存在某種形式的錯誤檢查,如Try-Catch Block?
Parse
如果無法解析該值則會拋出異常,而TryParse
會返回bool
,表示它是否成功。
TryParse
不僅僅是try
/catch
內部 - 它的整點在於它沒有例外地實現,因此速度很快。事實上,最有可能實施的方式是,內部Parse
方法將調用TryParse
,然後在返回false
時拋出異常。
簡而言之,如果您確定該值是有效的,則使用Parse
;否則使用TryParse
。
如果不能將字符串轉換爲整數,然後
TryParse方法允許您測試某些東西是否可解析。如果您嘗試使用無效int的第一個實例中的Parse,則您將在TryParse中得到一個異常,它會返回一個布爾值,讓您知道解析是否成功。
作爲腳註,傳遞給大多數TryParse方法的null將引發異常。
TryParse不返回值,它返回一個狀態碼來表明解析是否成功(並且不會引發異常)。
TryParse確實通過out關鍵字指定的參數2返回值。 – 2010-02-14 16:00:40
@Christian Madsen - 謝謝。 – 2010-02-15 00:13:20
TryParse and the Exception Tax
解析,如果從一個字符串到指定的數據類型轉換失敗,而明確的TryParse避免拋出異常拋出異常。
double.Parse(「 - 」);引發異常,而 double.TryParse(「 - 」,出解析);解析爲0 ,所以我想TryParse會做更復雜的轉換。
爲了記錄,我正在測試兩個代碼:它只是試圖將字符串轉換爲數字,如果失敗,則將數字指定爲零。
if (!Int32.TryParse(txt,out tmpint)) {
tmpint = 0;
}
和:
try {
tmpint = Convert.ToInt32(txt);
} catch (Exception) {
tmpint = 0;
}
對於C#,最好的選擇是的TryParse使用,因爲嘗試&捕捉替代拋出的異常
A first chance exception of type 'System.FormatException' occurred in mscorlib.dll
這是痛苦的緩慢和不希望的,但是,代碼不會停止,除非調試的異常通過它停止。
我知道它的一個很老的帖子,但是想到在Parse vs TryParse上分享一些更多的細節。
我有一個場景,其中DateTime需要轉換爲字符串,如果datevalue null或string.empty我們正面臨異常。爲了克服這個問題,我們已經用TryParse替換了Parse並且會得到默認日期。
舊代碼:
dTest[i].StartDate = DateTime.Parse(StartDate).ToString("MM/dd/yyyy");
dTest[i].EndDate = DateTime.Parse(EndDate).ToString("MM/dd/yyyy");
新代碼:
DateTime startDate = default(DateTime);
DateTime endDate=default(DateTime);
DateTime.TryParse(dPolicyPaidHistories[i].StartDate, out startDate);
DateTime.TryParse(dPolicyPaidHistories[i].EndDate, out endDate);
必須聲明另一個變量並用作出於對的TryParse。
「內部解析方法將調用TryParse」 除了Parse pre-date TryParse幾個版本。當然,他們可能已經將核心實現移到了TryParse ... – 2009-01-22 01:10:18
@Joel - 我認爲他們已經移動了實現,但我只是看了一下反射器,它們是* *完全相同的代碼一個人「扔......」,一個人「返回虛假」。我想知道他們爲什麼不鞏固?! – 2009-01-22 08:39:33
雖然考慮到它,但Parse會拋出一些不同的異常,所以如果它只有一個TryParse的bool,那麼它不會知道拋出哪個異常。 – 2009-01-22 08:42:10