2008-10-01 9 views
17

Est-il possible de déterminer si un ResourceManager contient une ressource nommée? Actuellement, j'attrape MissingManifestResourceException mais je déteste devoir utiliser des exceptions pour des situations non exceptionnelles. Il doit y avoir un moyen d'énumérer les paires de valeurs de nom d'un ResourceManager par réflexion, ou quelque chose?Déterminer si une ressource existe dans ResourceManager

EDIT: Un peu plus de détails. Les ressources ne sont pas en cours d'exécution, cependant le ResourceManager fonctionne très bien. Si j'essaye _resourceMan.GetResourceSet(_defaultCuture, false, true) je reçois la null, alors que si j'essaye _resourceMan.GetString("StringExists") j'obtiens une chaîne en arrière.

Répondre

22

Vous pouvez utiliser le ResourceSet pour cela, seulement il charge toutes les données en mémoire si vous l'énumérez. Here 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); 
+0

Lorsque j'essaie d'obtenir le ResourceSet du ResourceManager, je récupère null. –

+0

Ok, je l'ai eu le travail, mais je dois essayer de charger une seule ressource avant de pouvoir appeler GetResourceSet. Wierd. –

3

Je pense que vous pouvez utiliser quelque chose comme Assembly.GetManifestResourceNames pour énumérer la liste des ressources disponibles dans le manifeste de l'Assemblée. Ce n'est pas joli et ne résout pas tous les cas de coin, mais fonctionne si nécessaire.

+0

Cela renvoie un tableau de chaînes zéro. –

+0

Les ressources d'une ressource satellite sont-elles? – user7116

+2

Vous lui donnez des noms ResourceManager, pas des noms de ressources dans ces ResourceManagers;). –

Questions connexes