并不是说它会更好,但是我试图让我的头脑转向以下方法语法来查询语法以查看差异。
long diskSpace = Directory.EnumerateDirectories(@"c:\")
.SelectMany(Directory.EnumerateFiles)
.Sum(fileSize => new FileInfo(fileSize).Length);
答案 0 :(得分:6)
该查询大致相当于:
long diskSpace = (from directory in Directory.EnumerateDirectories(@"c:\")
from file in Directory.EnumerateFiles(directory)
select file)
.Sum(file => new FileInfo(file).Length);
(我已将fileSize
重命名为file
以更准确地表示其含义,顺便说一句。)
在这种情况下有一个实际的区别 - 我们正在创建一个新的委托,它调用Directory.EnumerateFiles
而不是直接从{{1>创建一个委托方法组。换句话说,它是一个额外的重定向级别 - 但这不会对结果产生任何影响,如果它有任何显着的性能影响,我会感到惊讶。
答案 1 :(得分:0)
没有区别。
编译器将查询语法aka LINQ转换为这些方法调用。查询语法只是语法上的含义。这不是魔术。