2010-10-12 3 views
1
ResourceSet rs = Resources.Loading.ResourceManager.GetResourceSet(CultureInfo.CurrentCulture, true, true); 

jusqu'à présent j'ai cette ligne, qui me reçoit tous les messages de chargement,Comment retourner une chaîne de ressource au hasard?

mon problème est le ResourceSet est un IEnumerable. Je ne peux pas comprendre quelle serait la meilleure façon de retourner une chaîne aléatoire dans cet énumérable.

Idéalement, je ferais quelque chose comme rs[Utility.Random(rs.Length)]

, mais je ne peux pas comprendre comment lancer la ResourceSet comme une liste (par exemple), donc je ne pas avoir recours à une abomination comme un manuel boucle avec quelque chose d'horrible comme:

public static string RandomLoadingMessage() 
    { 
     ResourceSet rs = Resources.Loading.ResourceManager.GetResourceSet(CultureInfo.CurrentCulture, true, true); 

     int count = 0; 

     foreach(object res in rs) 
      count++; 

     int position = Utility.Random(count); 

     count = 0; 

     foreach(DictionaryEntry res in rs) 
     { 
      if(count++ == position) 
       return res.Value.ToString(); 
     } 

     return string.Empty; 
    } 

Répondre

1

Puisque vous avez mentionné que vous avez accès à LINQ, vous pouvez utiliser la méthode d'extension Enumerable.Cast<TResult>() pour convertir le IEnumerable à sa version générique (IEnumerable<DictionaryEntry>):

static Random rng = new Random(); // outside of method... 

// ... 

ResourceSet rs = rm.GetResourceSet(CultureInfo.CurrentCulture, true, true); 
var resources = rs.Cast<DictionaryEntry>(); 
string randomValue = resources.ElementAt(rng.Next(0, resources.Count())).Value.ToString();