2016-11-11 91 views
0

我想從一個枚舉中獲取枚舉子集,以便稍後根據Dictionary的值選擇一個隨機枚舉元素。我試着這樣做:關於枚舉列表的LINQ查詢

var allEnums = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>(); 
    var availableEnums = allEnums.Where(e => SomeClass.SomeDictionary[e] < someThreshold); 
    //Note: SomeDictionary<MyEnum, int> 

而且,這並不工作之一:

var availableEnums = SomeClass.SomeDictionary.Where(entry => entry.Value < someThreshold); 

availableEnums的值總是{System.Linq.Enumerable + c__Iterator1D`1 [AircraftModel,彙編CSHARP ,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null]]}。我一定在做一些非常愚蠢的事情,但是我如何得到這個正確的?

+0

如果我得到你想要達到的目標,如果你想要一個集合,你需要用.ToArray()或ToList()來計算你的查詢結果。 Where和其他linq擴展返回一個序列。你需要考慮延期執行。 – reckface

+0

字典中是否包含每個枚舉的權重? –

+0

@reckface謝謝,.ToList()和.FindAll(...)一起完成了這項工作。我想我需要仔細看看。在哪裏,我認爲它就像.FindAll一樣。 – Maritn

回答

0

你想使用

var availableEnums = SomeClass.SomeDictionary 
         .Where(entry => entry.Value < someThreshold) 
         .ToList(); 
// or 
var availableEnums = SomeClass.SomeDictionary 
         .Where(entry => entry.Value < someThreshold) 
         .ToArray() 

的FindAll是以前的LINQ的擴展和項目結果立即,而如果被推遲,這可以讓你有效地鏈狀的排序依據多次操作,以等突出的前你的結果。