我们在写代码时往往会在foreach语句中使用某个方法,如:
foreach (string foo in Foo()) { }
答案是否定的。
在《C# 语言规范 3.0》的8.8.4节中,详细描述了foreach语句。在编译时,以下形式的foreach语句
foreach (V v in x) embedded-statement
将扩展为(集合类型C、枚举器类型E 和元素类型T)
{ E e = ((C)(x)).GetEnumerator(); try { V v; while (e.MoveNext()) { v = (V)(T)e.Current; embedded-statement } } finally { … // Dispose e } }
因此,foreach中的方法(注:不是foreach语句块中的方法)将只执行一次。
但是,for循环中for-condition则会执行多次。
for ( for-initializer ; for-condition ; for-iterator ) embedded-statement
将扩展为
{
for-initializer ;
while ( for-condition ) {
embedded-statement ;
for-iterator ;
}
}