不是说这种方法更好,但我试图理解将以下方法语法转换为查询语法的差异。
long diskSpace = Directory.EnumerateDirectories(@"c:\")
.SelectMany(Directory.EnumerateFiles)
.Sum(fileSize => new FileInfo(fileSize).Length);
该查询与以下查询大致相同:
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
而不是直接从Directory.EnumerateFiles
方法组创建委托。换句话说,这是一级额外的重定向-但这不会对结果产生任何影响,如果它对性能产生任何显着影响,我会感到惊讶。
没有区别。
编译器将查询语法(也称为LINQ)转换为这些方法调用。查询语法只是语法糖,不是魔法。