如何使用循环和条件执行oneliner代码?

use*_*077 2 c# syntax foreach

我如何使这个oneliner代码?

int result = 0;
if (directory.Files.Count() > 0)
{
    foreach (var file in directory.Files)
    {
        result += file.FileCommits.Count() > 0 ? file.FileCommits.Last().LinesOfCode : 0;
    }
}
return result;
Run Code Online (Sandbox Code Playgroud)

Yuv*_*kov 7

你正在做的是收集代码的总和.你可以使用Enumerable.Sum它(在@ScottChamberlain的屈膝礼中优化):

var sum = directory.Files.Sum(file => 
                              file.FileCommits.Select(commit => commit.LinesOfCode)
                                              .LastOrDefault())
Run Code Online (Sandbox Code Playgroud)

  • 循环消失了,因为你不再需要它了.`Enumerable.Sum`将迭代每个项目是`directory.Files`(就像`foreach`).然后,对于每个文件,它将调用提供给它的谓词.如果你不熟悉LINQ,我建议你开始阅读它[这里](https://msdn.microsoft.com/en-us/library/bb397926.aspx) (5认同)
  • Sum可以简化为`directory.Files.Sum(file => file.FileCommits.Select(commit => commit.LinesOfCode).LastOrDefault())`,假设`LinesOfCode`是`int`或其他类型的谁`default(T)`值是'0`. (2认同)