2016-11-11 151 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的扩展和项目结果立即,而如果被推迟,这可以让你有效地链状的排序依据多次操作,以等突出的前你的结果。