带委托的Linq查询不会更新变量

时间:2016-11-13 19:33:01

标签: c# .net linq

关于以下代码的简短问题。 为什么它总是显示0?

List<string> strList = new List<string>() { "Yes", "No", "Yes", "No", "Yes", "Yes"};
int hitCount = 0;
strList.Select(i =>
{
    if(i.Equals("Yes"))
    {
        hitCount++;
    }
    return i;           
});
Console.WriteLine(hitCount); // always returns 0.
Console.Read();

2 个答案:

答案 0 :(得分:3)

基本上在你的情况下查询没有运行,它只是一个简单的Selectretrun,要么你必须在查询结束时添加ToList()来实际运行查询,要么你可以执行其他操作以运行值为Yes的项目。在这种情况下,使用Count要快得多。

int hitcount = strList.Count(p => p == "Yes");

或者使用可以使用Where子句和Count

hitcount = strList.Where(p => p == "Yes").Count();

答案 1 :(得分:1)

如果您调用:

,则Select语句仅创建查询
result.ToList();

它将强制查询枚举,并且计数器将被更新。