2013-04-22 77 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());   
     }