使用ResourceManager.GetString()时如何避免使用魔术字符串?

时间:2012-10-21 00:14:53

标签: c# string resource-file

我在类库项目中有一个资源文件。我正在使用此资源文件来保存用户可能最终看到的各种消息。

例如,资源名称为“InvalidEmailAddress”,en-US资源文件中的值为“Invalid Email Address”。

当我调用ResourceManager的GetString(string)方法时,我这样做:

 return resourceManager.GetString("InvalidEmailAddress");

但是,这对我来说真的很糟糕。如果有人更改资源的名称怎么办?现在我的语句将返回一个空值。

有没有解决这个问题的方法?

更新:本地化是一个重要因素。使用资源管理器是为了确保我可以更改文化并获取适当的字符串值。

2 个答案:

答案 0 :(得分:5)

您可以使用自动生成的类 - 魔术字符串常量将从代码中删除,并替换为强类型访问方法。 VS将此文件命名为ResourceName.Designer.cs,并在每次在VS中修改resx时更新它。

生成方法的示例:

   internal static string String1 {
        get {
            return ResourceManager.GetString("String1", resourceCulture);
        }

注意:创建此文件是在VS中添加新资源时的默认行为,您可能已将其禁用,或者您可能尝试在程序集外使用生成的资源。在这种情况下,请确保将“自定义工具”属性或resx文件设置为“PublicResXFileCodeGenerator”或“ResXFileCodeGenerator”(稍后如果仅在单个程序集中使用资源)。 (感谢@dbaseman发表评论)。

答案 1 :(得分:2)

创建资源时,将在Resources名称空间中生成强类型。​​

您可以通过Resources.ClassName.InvalidEmailAddress访问它,其中ClassName是您的资源(resx)文件的名称。