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

时间:2019-12-16 14:20:59

标签: c# list lambda

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

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

4 个答案:

答案 0 :(得分:21)

这是对列表中小于或等于5的元素的数量进行计数。由于元素3、4、5、0、3和3满足此条件,因此您获得“ 6”。

n => n <= 5可能令人困惑。它是lamba表达式(n => expression )和谓词/条件(n <= 5)的组合。

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

Count<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) 

对于您来说,source是“ lista”,而您的predicaten <= 5的条件。然后,基本上此代码正在运行:

int count = 0;
foreach (TSource element in source) {
    checked {
        if (predicate(element)) count++;
    }
}
return count;

仅当谓词条件与您提供的条件匹配时,这才是遍历列表的方式。

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

答案 1 :(得分:4)

因为有6个元素3、4、5、0、3、3小于或等于5。

您提到您正在学习c#,所以让我更加清楚。

int number = lista.Count(n => n <= 5);

在那部分中,我们首先开始 n ,这表示让列表的每个项目都为 n ,而 => 表示我指出了一个条件大约而 n <= 5 部分是您的条件。这称为 Lambda表达式。并将该lambda表达式作为Count()方法的参数输入,将得出满足您条件的计数。

答案 2 :(得分:0)

List<int> lista = new List<int>() { 3, 4, 9, 8, 5, 6, 0, 3, 8, 3 };

int number = lista.Count(n => n <= 5);  // will be 6 and elements are {3,4,5,0,3,3}

var list  =  lista.Where(n => n <= 5).ToList(); // to check what elements in list after applying <= 5

    foreach(int n in list)
    {
        Console.Write(n+",");
        //output is 3,4,5,0,3,3,
    }

答案 3 :(得分:0)

以下代码以传统方式翻译了Lambda表达式(n => n <= 5):

List<int> lista = new List<int>() { 3, 4, 9, 8, 5, 6, 0, 3, 8, 3 };
// int number = lista.Count(n => n <= 5);
List<int> listb = new List<int>();

foreach(int n in lista)
{
    if (n <= 5)
        listb.Add(n);
}
int number = listb.Count();