WPF - 在不使用结构化异常处理的情况下检查资源是否存在

5

有没有一种方法可以检查一个程序集中是否存在资源,而不必使用异常处理?我目前正在从几个程序集中加载图像,如果它们不存在,则会处理IOException,这会导致相当大的开销。


这是我认为唯一有效的解决方案: https://dev59.com/mXI-5IYBdhLWcg3wHUZB - Jason Stevenson
2个回答

7

这样的内容是否适合您?

// Member Variable
string [] resourceNames;

// Function
Boolean ResourceExists(string resourceName)
{
    if (resourceNames == null)
    {
        resourceNames =  
            Assembly.GetExecutingAssembly().GetManifestResourceNames(); 
    }

    return resourceNames.Contains(resourceName);
}

2
谢谢,我们最终采用了类似的方法,即构建一个包含在程序集中的资源字典,然后在检索图像时对该字典进行检查。 - devdigital

0

这里复制的答案:

public static bool ResourceExists(string resourcePath)
{
    var assembly = Assembly.GetExecutingAssembly();

    return ResourceExists(assembly, resourcePath);
}

public static bool ResourceExists(Assembly assembly, string resourcePath)
{
    return GetResourcePaths(assembly)
        .Contains(resourcePath);
}

public static IEnumerable<object> GetResourcePaths(Assembly assembly)
{
    var culture = System.Threading.Thread.CurrentThread.CurrentCulture;
    var resourceName = assembly.GetName().Name + ".g";
    var resourceManager = new ResourceManager(resourceName, assembly);

    try
    {
        var resourceSet = resourceManager.GetResourceSet(culture, true, true);

        foreach(System.Collections.DictionaryEntry resource in resourceSet)
        {
            yield return resource.Key;
        }
    }
    finally
    {
        resourceManager.ReleaseAllResources();
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接