C# 使用ResourceManager和nameof运算符查找文本资源键

C# 使用ResourceManager和nameof运算符查找文本资源键,c#,embedded-resource,c#-6.0,nameof,C#,Embedded Resource,C# 6.0,Nameof,我必须访问弱类型的资源文件,这意味着我必须在ResourceManager传递完整名称空间+文件名的情况下加载/访问资源 var rm = new ResourceManager("namespace.name.locale.brand", Assembly.GetExecutingAssembly()); 我通过非重构安全方法中的“myImage”访问我的资源映像 string imageUrl = rm.GetString("myImage"); 想象一下,我有许多不同地区/品牌名称的

我必须访问弱类型的资源文件,这意味着我必须在ResourceManager传递完整名称空间+文件名的情况下加载/访问资源

 var rm = new ResourceManager("namespace.name.locale.brand", Assembly.GetExecutingAssembly());
我通过非重构安全方法中的“myImage”访问我的资源映像

string imageUrl = rm.GetString("myImage");
想象一下,我有许多不同地区/品牌名称的.resx文件。它们都有不同的图像,但它们有相同的键。因此,我无法访问这些静态类型的资源,因为我在运行时只知道正确的资源

但我希望有一种巧妙的方法,将nameof操作符和资源管理器实例结合起来

有人知道这种诡计吗

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


如果没有名为operator的解决方案,也欢迎使用任何工具;-)

由于您不希望使用静态类型的资源,因此除了手动更新代码之外,没有其他方法

但是,您仍然可以创建一个包装器来访问资源。通过创建包装器,可以将访问集中在单个文件中,还可以使用rename 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));