【问题标题】:Where Should Exception Messages be Stored异常消息应该存储在哪里
【发布时间】:2009-01-23 21:12:56
【问题描述】:

由于我不能以 Microsoft 作为最佳实践的示例,因为他们的异常消息是出于必要而存储在资源文件中的,所以我不得不问应该将异常消息存储在哪里。

我想这可能是我想到的常见地点之一

  • 默认资源文件
  • 局部常量
  • 类常量
  • 全局异常消息类
  • 作为字符串字面量内联

【问题讨论】:

    标签: c# exception resources


    【解决方案1】:

    我可能会因此而被枪决(好吧,被否决),但为什么不“在哪里创建异常”?

    throw new InvalidDataException("A wurble can't follow a flurble");
    

    除非您要将异常消息 (which I suggest you don't) 国际化,否则您是否特别需要它们成为常量等?好处在哪里?

    【讨论】:

    • 虽然以本地语言显示错误消息可能不合适,但对于作为平台供应商的 Microsoft 来说,这是必要的。但是对于许多项目,我使用了字符串文字。但是,我认为如果你真的想把它存储在某个地方,那就是资源文件,而不是常量或其他类型的东西。
    • 这是目前许多消息所在的位置,但这导致对于基本相同的例外情况的措辞略有不同。此外,有时消息非常冗长,可能会导致它从屏幕上消失。
    • Orion,在这种情况下,我认为您应该使用不同的异常类在其构造函数中设置消息。这将统一消息。
    • 好的,那没关系。如果您的消息太长,请尝试减少它们。它们不必是光荣的散文的完整句子——只要有足够的信息来完成工作。我看不出在这里使用资源文件会有什么帮助。措辞的变化也不重要。
    • 我正盯着屏幕顶部的“Jon Skeet Agreement”金徽章。 :))
    【解决方案2】:

    如果您的异常是强类型的,则无需担心消息。消息用于向用户呈现错误,异常用于控制异常情况下的流程。

    throw new InvalidOperationException("The Nacho Ordering system is not responding.");
    

    可以变成

    throw new SystemNotRespondingException("Nacho Ordering");
    

    在后一种情况下,无需翻译,因此无需担心本地化问题。

    【讨论】:

      【解决方案3】:

      出于需要?这是为了简化本地化。在您的应用程序中本地化错误消息,这是一个很好的方法。

      【讨论】:

      • 异常消息通常与用户可见的错误消息不同。
      【解决方案4】:

      如果您不打算向用户显示异常消息,那么您需要将它们与您确实需要翻译的资源字符串分开。

      如果你有很多重复的字符串,要么使用 Jon 建议的字符串文字,要么创建一个实用程序类来保存它们。

      【讨论】:

        猜你喜欢
        • 2015-05-03
        • 2019-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-20
        • 2018-10-28
        相关资源
        最近更新 更多