升级到 ReSharper5 后,它为我提供了更多关于代码改进的有用提示。我现在随处可见的一个技巧是用 LINQ 查询替换 foreach 语句。举个例子:
private Ninja FindNinjaById(int ninjaId)
{
foreach (var ninja in Ninjas)
{
if (ninja.Id == ninjaId)
return ninja;
}
return null;
}
建议使用 LINQ 将其替换为以下内容:
private Ninja FindNinjaById(int ninjaId)
{
return Ninjas.FirstOrDefault(ninja => ninja.Id == ninjaId);
}
这看起来一切都很好,而且我相信用 foreach 替换这个在性能方面没有问题。但这是我应该做的事情吗?或者我可能会遇到所有这些 LINQ 查询无处不在的性能问题?
最佳答案
您需要了解 LINQ 查询将“在幕后”执行的操作,并将其与运行您的代码进行比较,然后您才能知道是否应该更改它。一般来说,我并不是说您需要知道将生成的确切代码,但您确实需要知道它将如何执行该操作的基本概念。在您的示例中,我推测 LINQ 基本上会与您的代码大致相同,并且因为 LINQ 语句更紧凑和更具描述性,所以我更喜欢它。但是,有时 LINQ 可能不是理想的选择,尽管可能不多。一般来说,我认为几乎任何循环结构都可以用等效的 LINQ 结构替换。
关于c# - 使用 LINQ "everywhere"时的性能问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2674593/