我对枚举器如何工作以及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使用的链接.
使用时ToList(),是否需要考虑性能影响?
我正在编写一个查询来从目录中检索文件,这是查询:
string[] imageArray = Directory.GetFiles(directory);
但是,由于我喜欢与之合作List<>,我决定投入......
List<string> imageList = Directory.GetFiles(directory).ToList();
那么,在决定进行这样的转换时是否应该考虑某种性能影响 - 或者仅在处理大量文件时考虑?这是一个微不足道的转换?
起初我用a StreamReader来读取文件中的文本:
StreamReader reader = new StreamReader(dialog.OpenFile());
txtEditor.Text = reader.ReadToEnd();
Run Code Online (Sandbox Code Playgroud)
但发现File.ReadAllText哪个似乎将我的代码简化为1行.两者之间有什么不同吗?我什么时候应该使用另一个?
txtEditor.Text = File.ReadAllText(dialog.FileName);
Run Code Online (Sandbox Code Playgroud)