2010-07-29 45 views
8

我正在用C#編寫一個程序,我想要捕獲將「」(null) 轉換爲int引起的異常。什麼是例外名稱?C# - 失敗的解析異常?

編輯: 我不知道我在這裏可以顯示完整的代碼... 但我敢肯定你並不需要完整的代碼,所以:

 int num1 = Int32.Parse(number1.Text); 
     int num2 = Int32.Parse(number2.Text); 
+0

爲什麼你想知道異常的名稱?你會抓住它嗎? (希望不是......) – 2010-07-29 20:35:09

+9

另外,請注意「」和null是不同的東西。 – 2010-07-29 20:46:52

+0

將檢查錯誤而不是處理異常是一個問題? – 2010-07-29 20:49:33

回答

27

如果你能避免它,不要編寫例外!

您正在查找的例外名稱爲FormatException

但是,首先對要分析的對象執行TryParse會更聰明,

int value; 
if(!int.TryParse("1", out value)) 
{ 
    // You caught it without throwing an exception. 
} 
+1

爲什麼不首先「if(!String.IsNullOrEmpty(i))」?說真的,你甚至不想招致TryParse。即使你做了一千次,只有一次失敗,TryParse之前的if語句將會更快。 – DevinB 2010-07-29 21:08:32

+5

@devinb:添加兩行額外的代碼只是爲了讓它快10ms?聽起來像是對我不必要的微觀優化... – Heinzi 2010-07-29 21:45:09

+3

@George,如果你支持諸如「如果你能避免它,不要用例外代碼」和「它會更聰明」的說法, - ) – Saustrup 2016-07-14 05:57:57

9

作爲一個方面說明,找出異常的一個簡單方法是運行它。當你遇到錯誤時,它會給你例外名稱。

0

當發生異常時,您可以看到它是類型。聰明的事情是處理這種情況,並儘可能向用戶顯示優雅的信息。

1

取決於您使用的轉換。例如,int.Parse將拋出ArgumentNullExceptionFormatExceptionOverflowException。奇怪的是這是你要找的ArgumentNullException,但如果這是一個空字符串,而不是空引用,它可能會是FormatException

0

你可能希望得到一個System.InvalidCastException,但我認爲,就指望您如何嘗試執行轉換。

這就是說,簡單地編寫代碼並自己嘗試它會更快更簡單嗎?特別是因爲您尚未指定您將如何執行轉換

0

試試吧。此代碼:

int.Parse(""); 

引發FormatException。

0

異常昂貴。你應該使用int.TryParse。如果轉換失敗,它將返回布爾值false。

0

Convert.ToInt32不會在空字符串上引發格式異常(「輸入字符串格式不正確」)。如果結果對於空字符串爲0,那麼可以使用它。 (仍然pukes對空字符串,雖然)

 string s = null; 
     int i = Convert.ToInt32(s); 

但是,如果你指望一個數字是在框中,您應該使用的TryParse(如建議)或某種形式的驗證通知,他們需要用戶輸入一個數字。

6

讓我們來看看at the documentation(這是一個更清潔的解決方案, 「想出來」):

公共靜態INT解析(字符串s)

[...]

例外:

  • ArgumentNullException:s爲空。
  • FormatException:s的格式不正確。

這應該回答你的問題。正如其他人已經提到的,也許你問的是錯誤的問題,並且想用Int32.TryParse代替。

+0

+1文檔鏈接。 – Brian 2010-07-29 21:56:57