C# 为什么调用ResourceManager类比直接按名称加载资源更好?

C# 为什么调用ResourceManager类比直接按名称加载资源更好?,c#,resourcemanager,C#,Resourcemanager,我正在本地化一个大型项目,我正在通过手动创建一个大型资源文件,并在代码中按名称调用每个字符串来实现这一点。我没有调用ResourceManager并使用GetString(用于对话框等),而是将每个字符串替换为Resources.ClassName\u MethodName\u StringName 我有一种感觉,我应该使用ResourceManager,但我想在我更改所有代码以使用它之前理解为什么它更好。好吧,没有理由直接使用ResourceManager(一些例外情况将适用),因为如果使用从

我正在本地化一个大型项目,我正在通过手动创建一个大型资源文件,并在代码中按名称调用每个字符串来实现这一点。我没有调用
ResourceManager
并使用
GetString
(用于对话框等),而是将每个字符串替换为
Resources.ClassName\u MethodName\u StringName


我有一种感觉,我应该使用
ResourceManager
,但我想在我更改所有代码以使用它之前理解为什么它更好。

好吧,没有理由直接使用ResourceManager(一些例外情况将适用),因为如果使用从resx文件生成的代码,它所做的一切如下:

public static string MyResourceName {
    get {
        return ResourceManager.GetString("MyResourceName", resourceCulture);
    }
}
这很好,因为您可以免费获得资源名称的编译时验证

在内部,生成的类使用 ResourceManager类,该类在System.Resources中定义 命名空间。该类的实例可以通过 生成类的ResourceManager属性在内部,属性 访问嵌入式资源本身的过程只是 包装其中一个GetXxx方法(即GetString)的调用 或GetStream)。例如 可通过生成的属性过程访问的资源 Resources.myResourceString


因此,直接按名称调用资源,您使用的是resources.ResourceManager.GetString()方法。

不,您应该通过Properties.resources.NameOfStringResource。你做得对。这就是为什么要为您创建Resources.Designer.cs。例如,在Razor中,资源是“强类型”的。也就是说,您可以使用RessourceName.StringName而不是ResSourceManager.GetString(“StringName”)。智慧能帮助你。很高兴知道我不必回去改变任何事情。MSDN说什么都要打给ResourceManager,所以这就是为什么我认为我做得不对的原因。如果您将资源提供程序切换到例如DB ResourceProvider,这仍然有效吗?