找出具体的例外情况

时间:2017-06-08 19:13:13

标签: c# .net exception-handling

对缺乏信息抱歉......

有没有办法找出导致调用抛出异常的特定异常是什么?

目前,我通过 catch(例外e)来捕捉所有例外情况,但我知道这根本不是好的做法。

有没有办法从异常中了解导致问题的具体问题是什么,以便我可以更精细?

4 个答案:

答案 0 :(得分:3)

您可以使用不同的方法获取有关特定异常的更多信息。这里我使用System.Diagnostics.Debug类在Visual Studio的输出控制台中打印。在你的catch块中:

using System.Diagnostics;

try  
{
    // do stuff
}
catch (Exception e)
{
    Debug.WriteLine(e.GetType());  // Displays the type of exception
    Debug.WriteLine(e.Message());  // Displays the exception message
}

您可以在此处查看更多内容:Exception methods&                        Exception properties

答案 1 :(得分:2)

选项1 - 文档

阅读您正在调用的方法的文档,如果它是Framework类型(如SqlConnection.Open),则抛出的异常 well 记录。

选项2 - 在运行时发现它们

如果第三方库和文档有限,请在运行时使用Exception检查exception.GetType(),然后将要处理的已知异常添加为catch块。

我个人更喜欢不添加catch块,我不确定异常是否会实现。如果/何时调试器将中断(如果设置为中断)或者您有一个全局捕获所有记录并重新抛出。然后,您将获得类型并相应地更新您的代码。添加此类全局异常记录器的位置取决于您正在开发的应用程序类型。如果你走全局记录器的路线,请注意你1)重新抛出异常,以便app在运行时断开,吞下它,2)使用throw;语法重新抛出(不是{ {1}})。

答案 2 :(得分:0)

您可以捕获不同类型的异常。使用此解决方案,您可以轻松处理不同类型。

try
{
    //Try something
}
catch (StackOverflowException soe)
{
    //Handle StackOverFlowException
}
catch (FormatException fe)
{
    //Handle FormatException
}
//... Other exceptions

答案 3 :(得分:0)

如果您想更具体地记录错误,请尝试以下方法:

e.GetType()

或者,如果您需要更多信息,例如StackTrace或消息:

e.ToString()

如果您只想捕获特定类型的异常,则需要执行以下操作:

try {
   // someCode
} catch (SpecificExceptionType e) {
   // someCode (e.g. Console.WriteLine(e.ToString()); )
}
catch (AnotherSpecificExceptionType e) {
   // someCode (e.g. Console.WriteLine(e.ToString()); )
}