2008-10-01 3 views
17

Есть ли способ определить, содержит ли ResourceManager именованный ресурс? В настоящее время я улавливаю MissingManifestResourceException, но мне не нравится использовать Исключения для не исключительных ситуаций. Должен быть какой-то способ перечислить пары значений имени ResourceManager через отражение или что-то еще?Определить, существует ли ресурс в ResourceManager

EDIT: Немного подробней. Ресурсы не выполняют сборку, однако ResourceManager работает нормально. Если я попробую _resourceMan.GetResourceSet(_defaultCuture, false, true), я получаю null, тогда как если я попробую _resourceMan.GetString("StringExists"), я получаю строку обратно.

ответ

22

Вы можете использовать ResourceSet для этого, только он загружает все данные в память, если вы его перечислите. Здесь y'go:

// 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); 
3

Я думаю, вы можете использовать что-то вроде Assembly.GetManifestResourceNames, чтобы перечислять список ресурсов, доступных в манифесте Ассамблеи. Это некрасиво и не разрешает все угловые случаи, но работает, если требуется.

+0

Это возвращает массив нулевых строк. – 2008-10-02 03:04:36

+0

Ресурсы в спутниковом ресурсе? – user7116 2008-10-02 04:21:52