可能重复:
How does foreach work when looping through function results?C#foreach - 每次迭代都计算集合吗?
标题中有问题的心脏。这里有一个示例场景来丰富它。
foreach(something thing in GetSomethings())
{ dosomething }
可以说GetSomethings有副作用。 GetSomethings会执行一次,还是每次循环迭代都会执行?
可能重复:
How does foreach work when looping through function results?C#foreach - 每次迭代都计算集合吗?
标题中有问题的心脏。这里有一个示例场景来丰富它。
foreach(something thing in GetSomethings())
{ dosomething }
可以说GetSomethings有副作用。 GetSomethings会执行一次,还是每次循环迭代都会执行?
foreach使用IEnumerable
接口,它检索枚举器一次,并使用它来遍历集合。
因此,对复杂函数使用foreach是完全安全的,它不会每次重新计算集合。
谢谢!无法弄清楚在哪里看这个。教我钓鱼;有什么方法可以查看这些控制结构是如何实现的?或者更确切地说,你是怎么解决这个问题的? – MushinNoShin 2010-09-21 19:57:18
@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
如果您阅读关于foreach的MSDN文章:http://msdn.microsoft.com/en-us/library/ttw7t8t6(v=VS.71).aspx它提到了该方法它用。 MSDN是了解.NET中语言功能/类操作的非常好的资源。 – Aren 2010-09-21 20:01:02
请停止回答这个重复的问题。 – 2010-09-21 19:56:27
@anna lear;这当然是一个重复的问题。标题可能比简单的“迭代时foreach如何工作”更简洁一点。 – MushinNoShin 2010-09-21 20:00:49
我注意到这个问题很难回答你自己;只需让GetSomethings返回十个元素的集合并打印到控制台。如果它打印一次,那么它会被抓取一次。如果它打印十次,那么每次迭代都会取一次。 – 2010-09-21 20:04:45