在C#中的foreach语句中,每次迭代都会调用返回集合的方法吗?

Gus*_*bio 7 .net c# iterator loops

我今天早上正在使用一些C#代码,我有类似的东西:

foreach(DataRow row in MyMethod.GetDataTable().Rows) {
//do something
}
Run Code Online (Sandbox Code Playgroud)

所以,由于我没有完全理解语言框架,我想知道每次迭代完成后是否调用GetDataTable(),或者只是调用一次并且结果数据(可能是Rows)保存在内存循环通过它.无论如何,我宣布了一个新的集合来保存它并从那里工作......

我添加了一个新变量,所以我做了:

DataRowCollection rowCollection = MyMethod.GetDataTable().Rows;
foreach(DataRow row in rowCollection) {
//do something
}
Run Code Online (Sandbox Code Playgroud)

但我不太确定这是否有必要.

提前致谢.

mqp*_*mqp 11

别担心; 它只会在内部执行一次GetDataTable()以从DataRowCollection中获取枚举器对象,然后在每次循环运行时从中获取一个新项.