Определите, существует ли ресурс в ResourceManager.

StackOverflow https://stackoverflow.com/questions/160022

  •  03-07-2019
  •  | 
  •  

Вопрос

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

РЕДАКТИРОВАТЬ:Немного подробнее.Ресурсы не участвуют в выполнении сборки, однако ResourceManager работает нормально.Если я попробую _resourceMan.GetResourceSet(_defaultCuture, false, true) Я получаю ноль, тогда как если я попробую _resourceMan.GetString("StringExists") Я получаю веревку обратно.

Это было полезно?

Решение

Для этого вы можете использовать ResourceSet, но он загружает все данные в память, если вы их перечислите.Вот, пожалуйста:

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top