反射如何在资源存储库上工作

时间:2014-08-18 16:11:27

标签: c# .net localization resources

我想了解这样的代码如何检索指定的ThreadUI Culture的资源?

var value = resourceAssembly
      .GetType("Namespace.FooBar")
      .GetProperty("Hello")
      .GetValue(null, null) as string;

如果我的ThreadUI文化是英语,我会得到英语价值。如果是德国人,我会得到德国的价值。 好的。但它是如何在里面工作的?

1 个答案:

答案 0 :(得分:4)

如果打开与该类型对应的生成的C#文件,您将看到如下内容:

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

除非您具体 resourceCulture(通过设置Culture属性),它仍然是null,因此以上内容将等同于:

return ResourceManager.GetString("Hello", null);

ResourceManager属性返回System.Resources.ResourceManager,如果您查看ResourceManager.GetString(string, CultureInfo)的文档,您会看到:

  

在桌面应用中,如果 culture null,则GetString(String, CultureInfo)方法会使用从CultureInfo.CurrentUICulture属性获取的当前UI文化。

就是这样 - 只是调用一个默认使用当前UI文化的库方法。