为什么我的内循环迭代少于循环?很奇怪?

时间:2011-08-25 11:54:46

标签: c# linq

例如

            foreach(var toCheck in query)
            {
                foreach (var againstItem in totalWeight)
                {
                    count1++
                    if (getIEnumerable(toCheck,againstItem).Any(
                           x => { count2++; return (x == againstItem.Key); }))
                    {
                        blacklist.Add(toCheck);
                        break;
                    }
                    count3++;
                }
            }

结果是: count1 = 166184 count2 = 30620 count3 = 165848

count2count1

相比,我预计count3会更大

4 个答案:

答案 0 :(得分:5)

对于getIEnumerable(...)返回的集合中的每个元素,

count2将递增一次,直到在该集合中找到匹配为止。

如果该函数返回空集合,则count2可以很容易地小于count1

答案 1 :(得分:2)

代码块内的条件

x => { count2++; return (x == againstItem.Key); }

对列表中的每个项目进行一次评估

这就是.Any方法的含义 - 它确定枚举中的任何项是否满足给定条件。它必须评估每个项目的条件,并查看结果是true还是false。虽然一旦找到true,那么执行就会停止。

答案 2 :(得分:2)

如果没有要枚举的项目,则循环将不会运行且count2将不会增加。

你的情况可以吗?

答案 3 :(得分:0)

我真的不知道c#,但我的猜测是那个

count1每次都计算所有循环

count2,只有在找到命中时才会计算。就像我之前的那个人刚刚说的那样,如果你没有元素就不会增加

count3计算未满足的条件,因此每次找到命中时,它都会中断并且不会执行count3 ++