为什么输出是 6 而不是其他数字?

Dra*_*gan 4 c# lambda list

List<int> lista = new List<int>() { 3, 4, 9, 8, 5, 6, 0, 3, 8, 3 };
int number = lista.Count(n => n <= 5);
Run Code Online (Sandbox Code Playgroud)

我知道我们用这些数字创建列表……但是我们如何得到 6?不明白 (n => n <= 5) 这实际上发生了什么。

Jas*_*n W 20

这是计算列表中该数字小于或等于 5 的元素数。您得到“6”,因为元素 3、4、5、0、3 和 3 满足此条件。

n => n <= 5会引起混乱。它是 Lamba 表达式 ( n =>expression ) 和谓词/条件 ( n <= 5) 的组合。

当您调用此Count<TSource>(...)方法时,您正在使用此签名从 Enumerable 调用扩展方法:

Count<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) 
Run Code Online (Sandbox Code Playgroud)

对于您的情况,source是“lista”,而您predicaten <= 5. 然后,基本上这段代码正在运行:

int count = 0;
foreach (TSource element in source) {
    checked {
        if (predicate(element)) count++;
    }
}
return count;
Run Code Online (Sandbox Code Playgroud)

只有当谓词条件与您提供的条件匹配时,它才会迭代您的列表计数。

完整来源:https : //referencesource.microsoft.com/#system.core/system/linq/Enumerable.cs,1329