gpt4 book ai didi

c# - 以下两个语句有什么区别?

转载 作者:行者123 更新时间:2023-11-30 14:58:59 25 4
gpt4 key购买 nike

我们可以通过下面的语句来统计进程

var query = Process.GetProcesses()
.Where(m => m.ProcessName.StartsWith("S")).Count();

但 ReShaper 建议我喜欢下面的语句

var query = Process.GetProcesses().Count(m => m.ProcessName.StartsWith("S"));

我的问题是...如果我考虑性能问题,哪个更好???

最佳答案

第一个语句将在内部创建 WhereIterator,它将遍历源并应用谓词。计数计算将如下所示:

var iterator = new WhereArrayIterator<TSource>((TSource[]) source, predicate);

int num = 0;

using (IEnumerator<TSource> enumerator = iterator.GetEnumerator())
{
while (enumerator.MoveNext())
num++;
}

return num;

但是第二条语句不会创建迭代器 - 它会在直接遍历源序列时应用谓词:

int num = 0;

foreach (TSource local in source)
{
if (predicate(local))
num++;
}

return num;

因此,第二个语句的性能稍微更好。

关于c# - 以下两个语句有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17701252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com