我正在用C#編寫一個程序,我想要捕獲將「」(null) 轉換爲int引起的異常。什麼是例外名稱?C# - 失敗的解析異常?
編輯: 我不知道我在這裏可以顯示完整的代碼... 但我敢肯定你並不需要完整的代碼,所以:
int num1 = Int32.Parse(number1.Text);
int num2 = Int32.Parse(number2.Text);
我正在用C#編寫一個程序,我想要捕獲將「」(null) 轉換爲int引起的異常。什麼是例外名稱?C# - 失敗的解析異常?
編輯: 我不知道我在這裏可以顯示完整的代碼... 但我敢肯定你並不需要完整的代碼,所以:
int num1 = Int32.Parse(number1.Text);
int num2 = Int32.Parse(number2.Text);
如果你能避免它,不要編寫例外!
您正在查找的例外名稱爲FormatException
。
但是,首先對要分析的對象執行TryParse
會更聰明,
int value;
if(!int.TryParse("1", out value))
{
// You caught it without throwing an exception.
}
你是如果解析失敗,將獲得FormatException。爲什麼不用int.TryParse代替?
作爲一個方面說明,找出異常的一個簡單方法是運行它。當你遇到錯誤時,它會給你例外名稱。
當發生異常時,您可以看到它是類型。聰明的事情是處理這種情況,並儘可能向用戶顯示優雅的信息。
取決於您使用的轉換。例如,int.Parse
將拋出ArgumentNullException
,FormatException
或OverflowException
。奇怪的是這是你要找的ArgumentNullException
,但如果這是一個空字符串,而不是空引用,它可能會是FormatException
你可能希望得到一個System.InvalidCastException
,但我認爲,就指望您如何嘗試執行轉換。
這就是說,簡單地編寫代碼並自己嘗試它會更快更簡單嗎?特別是因爲您尚未指定您將如何執行轉換。
試試吧。此代碼:
int.Parse("");
引發FormatException。
異常昂貴。你應該使用int.TryParse。如果轉換失敗,它將返回布爾值false。
Convert.ToInt32不會在空字符串上引發格式異常(「輸入字符串格式不正確」)。如果結果對於空字符串爲0,那麼可以使用它。 (仍然pukes對空字符串,雖然)
string s = null;
int i = Convert.ToInt32(s);
但是,如果你指望一個數字是在框中,您應該使用的TryParse(如建議)或某種形式的驗證通知,他們需要用戶輸入一個數字。
讓我們來看看at the documentation(這是一個更清潔的解決方案, 「想出來」):
公共靜態INT解析(字符串s)
[...]
例外:
ArgumentNullException
:s爲空。FormatException
:s的格式不正確。
這應該回答你的問題。正如其他人已經提到的,也許你問的是錯誤的問題,並且想用Int32.TryParse代替。
+1文檔鏈接。 – Brian 2010-07-29 21:56:57
爲什麼你想知道異常的名稱?你會抓住它嗎? (希望不是......) – 2010-07-29 20:35:09
另外,請注意「」和null是不同的東西。 – 2010-07-29 20:46:52
將檢查錯誤而不是處理異常是一個問題? – 2010-07-29 20:49:33