C# 确定ResourceManager中是否存在资源

C# 确定ResourceManager中是否存在资源,c#,resources,C#,Resources,是否仍然可以确定ResourceManager是否包含命名资源?目前我正在捕获MissingManifestResourceException,但我讨厌在非异常情况下使用异常。必须有某种方法通过反射或其他方式枚举ResourceManager的名称-值对 编辑:更详细一点。资源不在执行程序集中,但是ResourceManager工作正常。如果我尝试\u resourceMan.GetResourceSet(\u defaultCuture,false,true)我会得到null,而如果我尝试\u

是否仍然可以确定ResourceManager是否包含命名资源?目前我正在捕获MissingManifestResourceException,但我讨厌在非异常情况下使用异常。必须有某种方法通过反射或其他方式枚举ResourceManager的名称-值对


编辑:更详细一点。资源不在执行程序集中,但是ResourceManager工作正常。如果我尝试
\u resourceMan.GetResourceSet(\u defaultCuture,false,true)
我会得到null,而如果我尝试
\u resourceMan.GetString(“StringExists”)
我会得到一个字符串。

我想你可以使用类似的方法来枚举程序集清单中可用的资源列表。它并不漂亮,也不能解决所有的问题,但如果需要,它可以工作。

您可以使用资源集来实现这一点,只有在枚举数据时,它才能将所有数据加载到内存中。给你:

    // At startup.
    ResourceManager mgr = Resources.ResourceManager;
    List<string> keys = new List<string>();

    ResourceSet set = mgr.GetResourceSet(CultureInfo.CurrentCulture, true, true);
    foreach (DictionaryEntry o in set)
    {
        keys.Add((string)o.Key);
    }
    mgr.ReleaseAllResources();

    Console.WriteLine(Resources.A);
//启动时。
ResourceManager mgr=Resources.ResourceManager;
列表键=新列表();
ResourceSet=mgr.GetResourceSet(CultureInfo.CurrentCulture,true,true);
foreach(字典输入集合)
{
添加((字符串)o.Key);
}
经理释放所有资源();
Console.WriteLine(参考资料A);

返回一个零字符串数组。资源是否在附属资源中?您给他提供的是ResourceManager名称,而不是那些ResourceManager中的资源名称;)。有趣的是,我用它来获取程序集旁边的资源,而不是资源管理器。i、 例如,Project\Resources\Image.jpg->Assembly.GetManifestresourceNames将返回Project.Resources.Image.jpg。这不是他想要的吗?是的,资源在卫星资源中。当我尝试从ResourceManager获取资源集时,我得到了空值。好的,我让它工作了,但我必须尝试加载单个资源,然后才能调用GetResourceSet。维尔德。