C# Linq in-For循环

C# Linq in-For循环,c#,C#,每次循环中都会执行linq语句吗?for循环是否以某种方式存储linq结果 for(int i = 0; i < mylist.Where(x => x > 10).ToList().Count; i++) for(int i=0;ix>10.ToList().Count;i++) 抱歉,如果出现重复的代码我在LINQPad中运行了以下代码: for(int i = 0; i < 10.Dump(); i++) { } for(int i=0;ix>10.ToLis

每次循环中都会执行linq语句吗?for循环是否以某种方式存储linq结果

for(int i = 0; i < mylist.Where(x => x > 10).ToList().Count; i++)
for(int i=0;ix>10.ToList().Count;i++)

抱歉,如果出现重复的代码

我在LINQPad中运行了以下代码:

for(int i = 0; i < 10.Dump(); i++)
{
}
for(int i=0;i<10.Dump();i++)
{
}
结果是:


因此,我认为答案是肯定的,它将执行多次。

是的,它会工作,但我建议最好尝试将其存储在int变量中

int k = mylist.Where(x => x > 10).ToList().Count; 
for(int i = 0; i < k; i++)
intk=mylist.Where(x=>x>10.ToList().Count;
for(int i=0;i
这使它更具可读性

您还可以使用以下选项:

mylist.Where(x => x > 10)
      .Select((x,index) => ExecuteYourFunction(x, index));
或者,如果您的方法没有任何返回值:

mylist.Where(x => x > 10)
      .Select((x,index) => new { Index = index, Value= x })
      .ToList()
      .Foreach(myType => ExecuteYourFunction(myType.Name, myType.Index));

有一个内置的
Count
method-
mylist.Count(x=>x>10)
。无论如何,条件将被执行多次=性能问题。是否会在每个循环上执行内置的Count方法?
ix>10)。ToList()。Count
每次迭代都会执行整个条件。“很抱歉,如果重复”-请先尝试搜索。我在“C#for loop condition evaluation every iteration”中找到了这个,当然是使用谷歌而不是网站搜索。如果他修改了列表,并希望在每次迭代后检查计数,那该怎么办?如果你不需要列表,最好使用
Enumerable.count
int count=mylist.count(x=>x>10)
。还值得一提的是,
foreach
并不是在每次迭代中都执行它。@NovitchiS条件应该是常量(IMHO)-我认为在
for
循环中将条件修改为变量是不好的做法。如果他想修改收藏,我认为while循环是一个更好的解决方案。这是一个有趣的方法,但事实证明很少。想象一下,如果
Where
方法看起来像(我知道它不是,但仍然是):
public IEnumerable Where(这个IEnumerable源,谓词条件){if(alreadyCalculated)return alreadyComputedArray;/*complex calculations*/alreadyCalculated=true;}
@decPL在这种情况下,它不会每次都求值吗?问题是是否每次都会执行代码。不,问题是是否执行LINQ语句。我认为,如果LINQ的工作方式不同(即它是以某种方式预先编译的),就不会有LINQ执行。我不是在质疑你的结果——是的,你是对的,每次都会执行LINQ语句。然而,我质疑你的方法论,因为它有缺陷。你所做的类似于:问题:猫会飞吗?回答:是的!如附件所示,我把一只鸽子扔到空中,它确实飞了。所以是的,动物在飞翔。@decPL哈哈哈。。。。是的,我明白你的意思。嗯,我认为这是一个实际的检查方法。我真的很想看到你试着扔大象…;-)我可能不应该发表评论,因为我是第一个跳转的人,如果它可以在LINQ中完成,那么就做吧!枪,但这也不是更可读的(这是从LINQ狂热),也没有表现更好。也没有意义<代码> Toistist s中间。第一个函数在你迭代它之前不会执行任何东西。@Rawling谢谢,在这两种情况下都被删除了。