假设SomeMethod有签名
public IEnumerable<T> SomeMethod<T>();
Run Code Online (Sandbox Code Playgroud)
两者之间有什么区别吗?
foreach (T tmp in SomeMethod<T>()) { ... }
Run Code Online (Sandbox Code Playgroud)
和
IEnumerable<T> result = SomeMethod<T>();
foreach (T tmp in result) { ... }
Run Code Online (Sandbox Code Playgroud)
换句话说,结果SomeMethod<T>是缓存在第一个语句上还是会在每次迭代时进行评估?
Fra*_*čik 13
假设你在谈论C#.
foreach 翻译成这样的东西:
var enumerable = SomeMethod<T>(); // Or whatever is passed to foreach
var enumerator = enumerable.GetEnumerator();
while (enumerator.MoveNext())
{
...
}
Run Code Online (Sandbox Code Playgroud)
因此,enumerable只需要一次,即使您将其直接放入foreach语句中,也只会调用SomeMethod .