我对枚举器如何工作以及LINQ有些怀疑.考虑这两个简单的选择:
List<Animal> sel = (from animal in Animals
join race in Species
on animal.SpeciesKey equals race.SpeciesKey
select animal).Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)
要么
IEnumerable<Animal> sel = (from animal in Animals
join race in Species
on animal.SpeciesKey equals race.SpeciesKey
select animal).Distinct();
Run Code Online (Sandbox Code Playgroud)
我更改了原始对象的名称,因此这看起来像一个更通用的示例.查询本身并不重要.我想问的是:
foreach (Animal animal in sel) { /*do stuff*/ }
Run Code Online (Sandbox Code Playgroud)
我注意到,如果我使用IEnumerable,当我调试并检查"sel"时,在这种情况下是IEnumerable,它有一些有趣的成员:"inner","outer","innerKeySelector"和"outerKeySelector",这些最后2个出现成为代表."内部"成员中没有"Animal"实例,而是"Species"实例,这对我来说非常奇怪."外部"成员确实包含"Animal"实例.我假设两位代表确定哪些进入,哪些进出?
我注意到如果我使用"Distinct","inner"包含6个项目(这是不正确的,因为只有2个是Distinct),但"outer"确实包含正确的值.同样,委托方法可能决定了这一点,但这比我对IEnumerable的了解要多一些.
最重要的是,两种选择中的哪一种是性能最佳的?
邪恶的名单转换通过.ToList()?
或者直接使用枚举器?
如果可以,请解释一下或抛出一些解释IEnumerable使用的链接.