在c#中,每次循环都会调用call方法吗?

时间:2015-05-20 11:29:08

标签: c#

我在代码库中遇到过这个问题:

foreach (var evtType in EventLocator.GetTypes())

并且记住 Shlemiel画家的算法方法EventLocator.GetTypes()是在每个循环上调用还是只调用一次?

2 个答案:

答案 0 :(得分:11)

迭代的指定集合在循环开始之前被概念性地捕获到局部变量中。它只执行一次。

你可以通过逻辑推导出这个事实。想象一下,源是一个有状态的IEnumerable<T>。如果丢弃旧对象并重新执行源表达式,您将如何继续循环?您无法将索引编入索引。

答案 1 :(得分:0)

不,它没有。 EventLocator.GetTypes()将由编译器优化到外部作用域中的变量