2010-09-21 59 views
2

可能重复:
How does foreach work when looping through function results?C#foreach - 每次迭代都计算集合吗?

标题中有问题的心脏。这里有一个示例场景来丰富它。

foreach(something thing in GetSomethings()) 
{ dosomething } 

可以说GetSomethings有副作用。 GetSomethings会执行一次,还是每次循环迭代都会执行?

+0

请停止回答这个重复的问题。 – 2010-09-21 19:56:27

+0

@anna lear;这当然是一个重复的问题。标题可能比简单的“迭代时foreach如何工作”更简洁一点。 – MushinNoShin 2010-09-21 20:00:49

+2

我注意到这个问题很难回答你自己;只需让GetSomethings返回十个元素的集合并打印到控制台。如果它打印一次,那么它会被抓取一次。如果它打印十次,那么每次迭代都会取一次。 – 2010-09-21 20:04:45

回答

8

foreach使用IEnumerable接口,它检索枚举器一次,并使用它来遍历集合。

因此,对复杂函数使用foreach是完全安全的,它不会每次重新计算集合。

+0

谢谢!无法弄清楚在哪里看这个。教我钓鱼;有什么方法可以查看这些控制结构是如何实现的?或者更确切地说,你是怎么解决这个问题的? – MushinNoShin 2010-09-21 19:57:18

+0

@Mush:http://msdn.microsoft.com/en-us/library/kx37x362.aspx,http://msdn.microsoft.com/en-us/library/ttw7t8t6.aspx,http:// go。 microsoft.com/fwlink/?LinkId=199552 – 2010-09-21 19:59:14

+0

如果您阅读关于foreach的MSDN文章:http://msdn.microsoft.com/en-us/library/ttw7t8t6(v=VS.71).aspx它提到了该方法它用。 MSDN是了解.NET中语言功能/类操作的非常好的资源。 – Aren 2010-09-21 20:01:02