相关疑难解决方法(0)

IEnumerable vs List - 使用什么?他们是如何工作的?

我对枚举器如何工作以及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)
  1. 我注意到,如果我使用IEnumerable,当我调试并检查"sel"时,在这种情况下是IEnumerable,它有一些有趣的成员:"inner","outer","innerKeySelector"和"outerKeySelector",这些最后2个出现成为代表."内部"成员中没有"Animal"实例,而是"Species"实例,这对我来说非常奇怪."外部"成员确实包含"Animal"实例.我假设两位代表确定哪些进入,哪些进出?

  2. 我注意到如果我使用"Distinct","inner"包含6个项目(这是不正确的,因为只有2个是Distinct),但"outer"确实包含正确的值.同样,委托方法可能决定了这一点,但这比我对IEnumerable的了解要多一些.

  3. 最重要的是,两种选择中的哪一种是性能最佳的?

邪恶的名单转换通过.ToList()

或者直接使用枚举器?

如果可以,请解释一下或抛出一些解释IEnumerable使用的链接.

c# linq ienumerable list

634
推荐指数
10
解决办法
42万
查看次数

调用ToList()会对性能产生影响吗?

使用时ToList(),是否需要考虑性能影响?

我正在编写一个查询来从目录中检索文件,这是查询:

string[] imageArray = Directory.GetFiles(directory);

但是,由于我喜欢与之合作List<>,我决定投入......

List<string> imageList = Directory.GetFiles(directory).ToList();

那么,在决定进行这样的转换时是否应该考虑某种性能影响 - 或者仅在处理大量文件时考虑?这是一个微不足道的转换?

c# arrays performance list

131
推荐指数
6
解决办法
5万
查看次数

File.ReadAllText()和使用StreamReader读取文件内容之间的任何区别?

起初我用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)

c#

45
推荐指数
3
解决办法
3万
查看次数

标签 统计

c# ×3

list ×2

arrays ×1

ienumerable ×1

linq ×1

performance ×1