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

到目前爲止,我有一個線,這讓我所有的加載消息,如何隨機返回資源字符串?

我的問題是的ResourceSet是一個IEnumerable。我無法弄清楚在這個枚舉中返回一個隨機字符串的最好方法是什麼。

理想情況下我會做這樣的事情rs[Utility.Random(rs.Length)]

,但我無法弄清楚如何鑄就的ResourceSet的列表(例如),所以我不必求助於像一個人工的憎惡循環與喜歡的東西可怕:

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; 
    } 

回答

1

既然你提到你有機會獲得LINQ,你可以使用Enumerable.Cast<TResult>()擴展方法的IEnumerable轉化爲它的通用版本(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();