【发布时间】:2011-05-06 21:52:01
【问题描述】:
我在 The Pragmatic Programmer 和其他一些文章(包括 Joel Spolsky 的一篇文章)中读到,您应该只在 异常 情况下抛出异常。否则,你应该返回一个错误。
有时这是可能的(例如返回-1、-0 或positive number),但在其他情况下这是不可能的。我的意思是,如果你要返回一个类,你总是可以返回null,但我认为这个想法是返回一些东西来提醒调用者发生了什么。
如果我总是返回null,我认为说:如果这个方法返回null,可能是因为A、B、C、D或E
那么,这究竟是如何在 C# 中实现的呢?
编辑:
在我发布这个问题几个小时后,我在这里看到了另一个问题,问题本身是关于发布的代码是否是一种好的做法。
我知道这是我在这里要求的另一种方式。这是链接:
【问题讨论】:
-
问题是假设每个消费者都会做他们应该做的返回码检查是一厢情愿的想法。这意味着他们不会检测到您的方法何时失败。异常使 API 非常 更易于使用。当一个方法未能完成它被调用的任务时,总是抛出它们。重点是从不将它们用于流量控制。
-
@CodyGray 这就是我一直在做的事情,我完全同意你的看法,但是当我在同一个地方的两个不同(和好)的地方读到同样的东西时,我忍不住要问日:实用程序员和 Joel On Software 博客。
-
很公平。我会发布一个更全面的答案,但已经有一个被接受了,看起来投票率最高的答案很好地涵盖了它。异常是一个非常容易被误解的话题,你会看到很多熟悉它们如何在 C++ 中工作的程序员错误地不鼓励在 C# 中使用它们。 .NET Framework Design Guidelines 是一个很好的资源。
-
@CodyGray 还有其他关于异常是一个非常被误解的话题的参考资料吗?
-
很难从有效建议中过滤错误信息。这使得在线资源非常棘手。 FDG 是我所知道的最好的参考。您还会发现许多将 C++ 异常知识应用到 C# 的程序员,或者从务实的角度来说,说某些东西是必要的,只是因为他们不知道替代方案。我经常争辩说,仅仅为了记录异常而捕获和重新抛出异常几乎总是错误的想法。它冒犯了那些认为我没有“现实世界经验”的人。像
AppDomain.UnhandledException这样的事件总是更好的选择。
标签: c# exception exception-handling