【问题标题】:Is using a dictionary an efficient way to handle errors?使用字典是处理错误的有效方法吗?
【发布时间】:2012-04-18 17:23:34
【问题描述】:

你们可能都注意到了,现在你遇到的不同程序的错误总是有那个错误 ID 号,这实际上意味着发生了什么。

我在想也许有一个Dictionary<int,string> 是个好主意,当 int 是错误 id 时,字符串是对所发生事件的描述。

例如:

ErrorID: 404
Description: Page not found

我问这个是因为我发现了一个缺点,并且不确定这是否是一个大问题(也许我只是不知道它是如何完成的)。 作为一名程序员,一旦你捕获了一个异常,你会如何将它与错误 ID 关联起来? (因此您最终可以向用户提供 Description 说明他的操作为何无法进行的原因)。

谢谢。

【问题讨论】:

  • HTTP 错误有状态码。大多数其他错误没有数字。
  • @SLaks 我不能完全同意,因为我在看到的 90% 的错误中都遇到了它们。当安装程序的操作不起作用时,网络问题或其他任何问题。但受欢迎程度有点跑题了,因为我只想知道它是否有效。
  • 在编写 http 协议时,错误代码是唯一可行的解​​决方案。如果您正在映射它们,那么字典没有问题,除非您正在与只能理解错误代码的东西进行交互,否则不要靠近它们。它们是维护的噩梦。
  • 你提到的所有这些小数量的应用程序都必须与不能接受错误/状态对象的东西进行交互,并提供关于错误的更有意义和更广泛的数据。
  • @TonyHopkinson 啊,我现在明白了。非常感谢您解决这个问题。

标签: .net exception error-handling


【解决方案1】:

您正在尝试转置 good old'error code 模式。当您处理无异常语言(例如 C)或黑盒/远程进程(HTTP 请求)时,这是一个很好的做法。

在 .net 中,您可以使用包含错误消息的异常:

throw new Exception("File not found");

甚至创建您自己的例外:

class FileNotFoundException : Exception
{
  public FileNotFoundException() : base("File not found") {}
}

用法:

throw new FileNotFoundException();

所以,答案是:处理不经常发生的错误的错误代码可能是一个很好的模式。 .NET 词典速度很快,但存在开销。但你的问题与 i18n 的东西相差不远。

真正的问题是:您更喜欢错误代码还是异常?

【讨论】:

  • 我没有意识到他们完全取代了你们提到的彼此,这和托尼对这个问题的评论对我来说是一个很好的信息。谢谢你们。
猜你喜欢
  • 2018-11-28
  • 1970-01-01
  • 1970-01-01
  • 2020-05-09
  • 2023-03-23
  • 2023-03-11
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
相关资源
最近更新 更多