2013-04-22 93 views
8

到現在,每當我想表明從我的代碼我用拋出的異常:顯示異常

try 
{ 
    // Code that may throw different exceptions 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.ToString());   
} 

我用上面的代碼,主要用於調試的原因,爲了看確切的異常類型和拋出異常的相應原因。

在我現在創建的一個項目中,我使用了幾個try-catch子句,並且我想在出現異常時顯示一個彈出消息,以使其更加「用戶友好」。通過「用戶友好」,我的意思是將隱藏像空引用異常參數超出當前與上面的代碼顯示的範圍異常短語的消息。

但是我還是想看到與創建該消息異常的類型相關的信息。

有沒有辦法來格式化根據之前需要拋出的異常的顯示輸出?

+0

您可以顯示你想要的任何類型的消息,或反應異常在任意數量的方式,在您的掌握,一旦你捕捉到的異常。 – devdigital 2013-04-22 10:58:27

+0

如果您要進行調試,爲什麼不使用調試器?如果最終用戶出現任何意外異常,只需登錄並讓程序終止。 – 2013-04-22 10:58:38

+1

更好地爲每個異常添加消息,而不是僅添加1個。添加多個catch塊並在每個catch塊中添加msgbox。不抓例外直接 – Amitd 2013-04-22 10:59:29

回答

8

您可以使用.Message,但是我不建議乾脆直接抓住Exception。嘗試捕獲多個異常或顯式聲明異常並將錯誤消息定製爲異常類型。

try 
{ 
    // Operations 
} 
catch (ArgumentOutOfRangeException ex) 
{ 
    MessageBox.Show("The argument is out of range, please specify a valid argument"); 
} 

追趕Exception是比較通用的,可以被認爲是不好的做法,因爲它也許在您的應用程序隱藏的錯誤。

您還可以檢查異常類型,並通過檢查異常類型相應處理:

try 
{ 

} 
catch (Exception e) 
{ 
    if (e is ArgumentOutOfRangeException) 
    { 
     MessageBox.Show("Argument is out of range"); 
    } 
    else if (e is FormatException) 
    { 
     MessageBox.Show("Format Exception"); 
    } 
    else 
    { 
     throw; 
    } 
} 

這將顯示一個消息框,用戶如果異常是ArgumentOutOfRange或出現FormatException,否則會重新引發異常(並保留原始堆棧跟蹤)。

+0

你忘了最後一個情況,你需要再次拋出異常。 – 2013-04-22 11:03:36

+0

在你的第二個例子,你可以用'丟;爲了進一步在try鏈 – Default 2013-04-22 11:03:41

+0

'傳播它寫什麼用'ArgumentOutOfRangeException'和'FormatException'多個'catch'條款,而不是寫'如果else'的問題在一個'catch'塊中的語句 – 2013-04-22 11:08:30

3

Exception.Message提供比Exception.ToString()一個多個(但不是全部)的用戶友好的消息。考慮這個人爲的例子:

try 
{ 
    throw new InvalidOperationException(); 
} 
catch(InvalidOperationException ex) 
{ 
    Console.WriteLine(ex.ToString()); 
} 

雖然Message產生比ToString()一個簡單的消息顯示的消息仍然沒有多大的意義給用戶。手動吞服異常並向用戶顯示一條自定義消息可以幫助他們解決這個問題。

try 
{ 
    using (StreamReader reader = new StreamReader("fff")){} 
} 
catch(ArgumentException argumentEx) 
{ 
    Console.WriteLine("The path that you specified was invalid"); 
    Debug.Print(argumentEx.Message); 

} 
catch (FileNotFoundException fileNotFoundEx) 
{ 
    Console.WriteLine("The program could not find the specified path"); 
    Debug.Print(fileNotFoundEx.Message); 
} 

你甚至可以使用Debug.Print輸出文本的直接窗口或輸出窗口(根據您的喜好VS)進行調試。

2

可以使用Exception.Message屬性來獲取描述當前異常的消息。

catch (Exception ex) 
    { 
    MessageBox.Show(ex.Messagge());   
    } 
2
try 
    { 
     /////Code that may throws several types of Exceptions 
    }  
    catch (Exception ex) 
     { 
     MessageBox.Show(ex.Message);   
     } 

使用上面的代碼。

也可以顯示定製的錯誤信息爲:

try 
    { 
     /////Code that may throws several types of Exceptions 
    }  
    catch (Exception ex) 
     { 
     MessageBox.Show("Custom Error Text "+ex.Message);   
     } 

附加:

對於ex.toString()和ex.Message之間差異遵循:

Exception.Message vs Exception.ToString()

全部具體例如:

http://www.dotnetperls.com/exception

+0

'MessageBox.Show(ex.Message); ' – Arshad 2013-04-22 11:00:05

+0

@Arshad錯誤,thanx – Freelancer 2013-04-22 11:00:52

2

試試這個代碼:

 try 
     { 
     // Code that may throw different exceptions 
     } 
     catch (Exception exp) 
     { 
      MessageBox.Show(exp.Message());   
     }