3

我必须访问弱类型的资源文件,这意味着我必须使用传递完整命名空间 + 文件名的 ResourceManager 加载/访问资源。

 var rm = new ResourceManager("namespace.name.locale.brand", Assembly.GetExecutingAssembly());

我以非重构安全方法通过“myImage”访问我的资源图像。

string imageUrl = rm.GetString("myImage");

试想一下,我有许多具有不同语言环境/品牌名称的 .resx 文件。它们都有不同的图像,但它们具有相同的键。因此,我无法访问那些静态类型的资源,因为我只知道运行时正确的资源。

但我希望有一种结合 nameof 运算符和资源管理器实例的棘手方法。

有谁知道这个棘手的方法吗?

请不要建议以静态类型的方式访问任何这些 .resx 文件,并将带有 nameof 的密钥传递给上述 .GetString() 方法。

如果 nameof 运算符没有解决方案,那么欢迎使用任何工具;-)

4

1 回答 1

1

由于您不想拥有静态类型的资源,因此除了手动更新代码之外别无他法。

但是,您仍然可以创建一个包装器来访问资源。通过创建包装器,您可以将访问集中在一个文件中,也可以使用重命名F2来一劳永逸地更改它。

public class ResourceWrapper
{
    private ResourceManager rm;

    public ResourceWrapper(string name) :
        this(name, Assembly.GetCallingAssembly())
    {
    }
    public ResourceWrapper(string name, Assembly assembly)
    {
        rm = new ResourceManager(name, assembly);
    }

    public string myImage => rm.GetString(nameof(myImage));
}

或者,您可以静态链接到其中一个资源文件并将其用作. nameof喜欢 :

string imageUrl = rm.GetString(nameof(DummyResource.myImage));
于 2016-04-27T22:35:32.707 回答