我正在尝试使用迭代器功能。
目标是要获得所有Calculation
,GetCalculations
的迭代器,并且要这样做,我有一个函数GetCalculationFromSheetRowData
,可以将原始数据转换为强类型的对象。
据我了解,迭代器将以某种方式存储函数的状态,并在每次调用时从中断处恢复循环。
但是,当我对程序进行概要分析时,我会看到对迭代器GetCalculations
的4078次调用,这是预期的,因为RawCalculations列表有4078行,但是对GetCalculationFromSheetRowData
的4 122 576次调用
我一直试图弄清楚这个电话的数量,但是尽管我做了最大的努力(不是4078平方,它不是从1到4078的整数之和,等等),但是我仍然无法理解危险的过程在这里。
能否请您帮助我了解发生了什么事情,以便我可以尝试解决它?
//The raw data is populated by an other mecanism.
private IList<IList<object>> RawCalculations { get; }
public IEnumerable<Calculation> GetCalculations()
{
foreach (var row in RawCalculations)
{
if (row.Count == 0)
continue;
yield return GetCalculationFromSheetRowData(row);
}
}
private Calculation GetCalculationFromSheetRowData(IList<object> row)
{
//Takes raw data, as IList<object> and returns a strongly-typed Calculation object
}