gpt4 book ai didi

c# - 如何在 c#/.net 中记录抛出的异常

转载 作者:IT王子 更新时间:2023-10-29 03:32:42 27 4
gpt4 key购买 nike

我目前正在编写一个小型框架,供公司内部的其他开发人员使用。

我想提供良好的 Intellisense 信息,但我不确定如何记录抛出的异常。

在下面的例子中:

public void MyMethod1()
{
MyMethod2();

// also may throw InvalidOperationException
}

public void MyMethod2()
{
System.IO.File.Open(somepath...); // this may throw FileNotFoundException

// also may throw DivideByZeroException
}

我知道记录异常的标记是:

/// <exception cref="SomeException">when things go wrong.</exception>

我不明白的是如何记录由 调用 MyMethod1() 的代码抛出的异常?

  • 我应该记录 MyMethod2() 抛出的异常吗?
  • 我应该记录 File.Open() 抛出的异常吗?

记录可能的异常情况的最佳方式是什么?

最佳答案

您应该记录您的代码可能抛出的每个异常,包括您可能调用的任何方法中的异常。

如果列表变得有点大,您可能想要创建自己的异常类型。捕获您在方法中可能遇到的所有异常,将它们包装在您的异常中,然后抛出。

如果您的方法位于 API 表面,您可能希望以这种方式执行的另一个地方。就像外观将多个接口(interface)简化为一个接口(interface)一样,您的 API 也应该将多个异常简化为一个异常。让调用者更轻松地使用您的代码。


为了回答 Andrew 的一些担忧(来自评论),异常分为三种类型:一种是您不知道的,一种是您知道但无能为力的,另一种是您知道但可以做的一些关于。

那些你不知道的你想放手。它是快速失败的原则——最好让你的应用程序崩溃,而不是进入可能最终损坏数据的状态。崩溃会告诉您发生了什么以及原因,这可能有助于将该异常从“您不知道的”列表中移出。

您知道但无能为力的是诸如 OutOfMemoryExceptions 之类的异常。在极端情况下,您可能希望像这样处理异常,但除非您有一些非常特殊的要求,否则您将它们视为第一类——放手吧。您记录这些异常吗?在每个新建对象的方法上记录 OOM 看起来很愚蠢。

您知道并且可以做些什么的就是您应该记录和包装的那些。

您可以找到更多 guidelines on exception handling here.

关于c# - 如何在 c#/.net 中记录抛出的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/461306/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com