你应该在.NET中存储常量字符串

时间:2010-11-29 13:18:35

标签: .net string

您应该在哪里存储常用字符串以获取错误消息,通知等?

我曾经把它放到这个有很多const个字符串的全局类中,但我也看到了一些存储在资源文件中的地方。放在哪里最好的地方?我正在使用.NET btw。

5 个答案:

答案 0 :(得分:15)

如果您预计需要将它们换掉,Resx会很方便 - 例如国际化或按实例定制。但是在它们之间手动移动它们并不是很困难。那么:它可能需要改变吗?

说:如果你将它们保存在代码中,尽量保持常量尽可能紧密;例如,如果常量仅与User个实例相关,请将其放在User

同样,赢得改变的事情不应该是一个混乱的resx;例如,一些与数据库中值的含义相关的内部知名字符串...即使 使用resx,也可能不属于resx。

答案 1 :(得分:7)

我想如果您想要翻译/本地化您的产品,那么资源文件将是存储这些文件的最佳位置。

我相信两者都有其他优点/缺点,但那是第一次跳到我脑中的。

答案 2 :(得分:3)

如果它们是您的UI元素(如标题等)的一部分,则将它们放在资源文件中。

如果它们是程序构造的一部分,例如文件前缀,内部错误消息字符串等,则应将它们放在单独的代码文件中。

答案 3 :(得分:3)

任何可以本地化的东西都应该在资源文件中。即使您100%确定,您也永远不需要在资源文件中使用字符串进行本地化,这样可以轻松实现转换。

所以标题,名称,GUI标签,对话文本,错误消息等都属于resx。 立即行动。如果您的应用程序确实需要本地化,未来的开发人员将会感谢您。

现在其他常量更难一点。我不认为有一个很难的&快速规则但通常我尝试将“true”常量定义为const,并根据需要使用尽可能小的范围。通过真正的常量,我的意思是任何不可能在应用程序生命周期范围内改变的东西。我不喜欢将资源文件用于非本地化字符串,因为它往往会破坏封装。例如,必须在本地定义PKDB2函数的require大小。加密对象之外的任何人都不需要知道它是什么。

事情提出了一个相关的话题。任何当前静态但可能在将来发生变化的东西(即使在将来的应用程序版本中)都应该被声明为readonly。这些可以从resx加载,我个人不这样做。 Effectivve C#在第2项中涵盖了这一点。

此外,很大程度上取决于您的公司/团队需要我曾参加过资源文件中没有任何内容的团队,以及团队中的所有内容(即使我觉得应该在本地定义的内容)都保存在资源文件中。

答案 4 :(得分:1)

请参阅this post,您可以在评论中找到一些有用的答案和有价值的讨论。

作为一般规则,你应该:

  • 在使用常量创建公共类之前请三思。
  • 将用户消息显示在资源文件中(您永远不知道项目何时需要本地化)