Verifique se existe um recurso em ResourceManager
Pergunta
Existe uma maneira de determinar se um ResourceManager contém um recurso chamado? Atualmente estou pegando o MissingManifestResourceException mas eu odeio ter que usar exceções para situações não-excepcionais. Deve haver alguma maneira de enumerar os pares de valores de nome de um ResourceManager através da reflexão, ou algo assim?
Editar : Um pouco mais detalhadamente. Os recursos não estão em execução montagem, no entanto, o ResourceManager está funcionando muito bem. Se eu tentar _resourceMan.GetResourceSet(_defaultCuture, false, true)
I get nulo, ao passo que se eu tentar _resourceMan.GetString("StringExists")
eu recebo uma volta string.
Solução
Você pode usar o ResourceSet fazer isso, só que carrega todos os dados na memória se você enumerá-lo. Aqui 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);
Outras dicas
Eu acho que você pode usar algo como Assembly.GetManifestResourceNames para enumerar a lista de recursos disponíveis na do manifesto do assembly. Não é bonito e não resolve todos os casos de canto, mas funciona, se necessário.