在try-catch子句上显示异常

时间:2013-04-22 10:55:39

标签: c# .net exception try-catch

到目前为止,每当我想显示我使用的代码抛出异常时:

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

我使用上面的代码主要是为了调试原因,以便查看异常的确切类型以及抛出异常的相应原因。

在我正在创建的项目中,我使用了几个try-catch子句,并且我希望在出现异常时显示弹出消息,以使其更“用户友好”。通过“用户友好”,我的意思是一条消息,它将隐藏当前使用上述代码显示的 Null Reference Exception Argument Out of Range Exception 等短语。

但是,我仍然希望查看与创建消息的异常类型相关的信息。

有没有办法根据以前的需要格式化抛出异常的显示输出?

6 个答案:

答案 0 :(得分:11)

您可以使用.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;
   }
}

如果Exception是ArgumentOutOfRange或FormatException,那么会向用户显示一个消息框,否则它将重新抛出异常(并保留原始堆栈跟踪)。

答案 1 :(得分: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 :(得分:3)

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

答案 3 :(得分:2)

您可以使用Exception.Message属性来获取描述当前异常的消息。

  catch (Exception ex)
   {
     MessageBox.Show(ex.Messagge());         
   }

答案 4 :(得分:2)

试试这段代码:

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

答案 5 :(得分:1)

诀窍是使用异常的 Message 方法:

catch (Exception ex)
{
    MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}