【问题标题】:How do I know all the exceptions that a method throws in C#?我如何知道方法在 C# 中引发的所有异常?
【发布时间】:2011-08-28 20:23:37
【问题描述】:

例如我想写一个 REST 客户端。我不想为所有调用使用一个 catch 语句,而是想知道所有抛出的消息,看看我是否能处理它们。

在 Eclipse 和 Java 中真的很简单。问题是对于某些方法,签名和文档并没有告诉我所有抛出的异常。

【问题讨论】:

    标签: c# exception-handling error-handling


    【解决方案1】:

    C# 不像 Java 那样支持“检查异常”。

    您唯一能做的就是依赖文档(MSDN,如果有问题的方法是 .NET 框架的一部分)...

    而且,即使 C# 应该检查异常,您仍然无法从签名中提取该方法可能抛出的所有异常。它只提到了调用方法时必须捕获的异常。

    【讨论】:

    • 这并不总是完整或准确的......但 .net 文档仍然是 msdn 上最好的!
    【解决方案2】:

    捕获所有异常是个坏主意。您应该只捕获您真正知道如何处理的异常处理

    【讨论】:

    • 是的,所以问题是我怎么知道抛出的所有异常?
    • 好的...但是查阅文档并查看可能引发的错误通常是一个非常好的主意,因为您通常会知道如何处理很多您没有处理过的错误没想到
    • 答案是你不知道抛出的所有异常,也不想知道它们。您应该只担心您实际上可以 的异常。如果你不能解决问题,那么你打算怎么做?
    • 不错的理论。不幸的是,在许多情况下,人们知道如何正确处理可能抛出的 99.44% 的异常,但无法识别它们。例如,调用Spreadsheet.ReadFromFile(),它以某种方式读取文件;假设它抛出一个 ArgumentException、一个 AcmeFileReader.TroubleWithBlock37HeaderException 或一些从未听说过的异常。最有可能的是,正确的行为是通知用户文件无法加载,而不阻止用户使用或继续使用其他文件。
    • 自 99.44 起,我不能完全指责那些假设对于任何非特定处理的异常他们可以提出错误消息但让程序继续运行(放弃加载文件的努力)的程序员% 的时间将是正确的行动方案。在许多情况下,程序员必须处理由他无法控制的代码引发的异常,因此可能无法枚举所有可能的异常,而这些异常最好通过简单地放弃加载文件来处理。
    猜你喜欢
    • 1970-01-01
    • 2020-11-10
    • 2010-11-26
    • 2017-06-03
    • 2015-03-18
    • 2013-11-30
    • 2019-07-06
    • 2019-08-25
    • 2011-03-08
    相关资源
    最近更新 更多