首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在我的代码中使用方法在.NET中抛出的异常信息?

如何在我的代码中使用方法在.NET中抛出的异常信息?
EN

Stack Overflow用户
提问于 2010-03-23 06:57:02
回答 3查看 114关注 0票数 0

对于.NET中的许多方法,它们可能抛出的异常可能多达7-8个( XmlDocument中的一个或两个方法,我认为Load()就可以抛出这么多异常)。

这是否意味着我必须编写8个catch块来捕获所有这些异常(最好使用特定的异常块来捕获异常,而不仅仅是一个类型为exception的通用catch块)。

如何使用此信息?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-23 07:08:39

简单地捕获异常是控制程序流程的一种方法。一般来说,捕获特定异常比捕获更通用的异常类型(一直到Exception)更好,这是正确的,但这并不意味着捕获所有异常是有意义的。某些异常根本不应该被捕获;在这种情况下,您应该有一些错误报告系统来通知您这种真正的异常行为。

我倾向于捕获异常,我可以为其提供一些追索权。因此,我将捕获特定的异常,在这些异常中,我可以向用户(或调用者)提供一些有用的信息,或者当执行一些额外的逻辑是有意义的时候。但通常情况下,最好让某些异常根本不被处理。存在许多.NET异常(例如ArgumentNullException )是为了通知程序员编程错误,而不是通知用户某些不正确的行为。

票数 0
EN

Stack Overflow用户

发布于 2010-03-23 07:07:23

通常,不要捕获异常,除非您可以对其采取一些措施。让它冒泡到调用者。如果你想捕获异常只是为了提供信息,那么你可以再次抛出它:

代码语言:javascript
复制
try
{
    // some code
}
catch (SomeSpecificExceptionThanYouCanHandle ex)
{
    // This is an exception I can do something about
    // so I'll do something intelligent
}
catch (Exception ex)
{
    Logger.Error("Exception in SomeMethod: " + ex.Message);
    throw;
}

因此,如果您调用的方法可能抛出8种不同的异常类型中的一种,请为您可以处理的异常类型添加catch块,并将其他异常类型留给调用者处理。如果您正在编写类库(也可能是其他情况),请不要忘记记录您的方法可能抛出的异常。

但在应用程序的“顶层”,情况并非如此。按钮单击的事件处理程序不应该以不受控制的方式使应用程序崩溃;在这里,您需要优雅地尝试做一些事情;捕获异常,记录它,告诉用户事情没有解决,并可能(如果必要)关闭应用程序。

票数 3
EN

Stack Overflow用户

发布于 2010-03-23 07:31:31

是的,最佳实践是有许多捕获,而不是使用一般的异常,fxcop等工具将在分析代码时确认这一点。在实践中,我看到的大多数是2-3个接球。

你可以查看你的对象资源管理器,看看哪个类派生了你的异常,并捕获父异常,而不是所有8种可能的异常。

实际上,看看你当前使用对象的方式可能失败的地方,通常只有一两个异常可能发生,然后你可以用一个通用的异常来跟进它。

捕捉异常不应该用来控制流程,它应该用来处理你的方法没有成功完成其工作所需的东西的情况。

在catch中,您通常会写入日志文件或系统的事件日志。你会写下这样的东西

string message =“从数据库检索产品时出错。系统报告: ex.Message”

string message =“从数据库检索产品时出错”

如果(ex.Number == 20) { message = message +“这可能表示无法建立到数据库的连接”}

message = message +“系统报告: ex.Message”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2496353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档