对缺乏信息抱歉......
有没有办法找出导致调用抛出异常的特定异常是什么?
目前,我通过 catch(例外e)来捕捉所有例外情况,但我知道这根本不是好的做法。
有没有办法从异常中了解导致问题的具体问题是什么,以便我可以更精细?
答案 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)
阅读您正在调用的方法的文档,如果它是Framework类型(如SqlConnection.Open),则抛出的异常 well 记录。
如果第三方库和文档有限,请在运行时使用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()); )
}