我认识到这可能不需要重构。我只是开始尝试重构,并且我尝试使用这一行代码尝试这样做失败。我试图在VS2013中使用提取方法。唉。我在另外11个实例中使用了这一行的右侧。我将如何重构C#中的这一行代码?
Balance = Enumerable.Repeat(0.0, MonthsToRun).ToList();
Balance
是double
,MonthsToRun
为int
。
每请求:
for (int i = 0, chunksCnt = Chunks.Count; i < chunksCnt; i++)
{
if (Chunks[i].BeginDate < BeginDate) BeginDate = Chunks[i].BeginDate;
MonthsToRun = Math.Max(MonthsToRun, Utils.MonthDifference(BeginDate, Chunks[i].BeginDate) + Chunks[i].Balance.Count);
}
Balance = Enumerable.Repeat(0.0, MonthsToRun).ToList();
Default = Enumerable.Repeat(0.0, MonthsToRun).ToList();
Loss = Enumerable.Repeat(0.0, MonthsToRun).ToList();
Prepay = Enumerable.Repeat(0.0, MonthsToRun).ToList();
Principal = Enumerable.Repeat(0.0, MonthsToRun).ToList();
Interest = Enumerable.Repeat(0.0, MonthsToRun).ToList();
for (int i = 0, chunksCnt = Chunks.Count; i < chunksCnt; i++)
{
offset = Utils.MonthDifference(BeginDate, Chunks[i].BeginDate);
for (int j = offset, balanceCnt = Chunks[i].Balance.Count; j < (balanceCnt + offset); j++)
{
Balance[j] += Chunks[i].Balance[j - offset];
Default[j] += Chunks[i].Default[j - offset];
Loss[j] += Chunks[i].Loss[j - offset];
Prepay[j] += Chunks[i].Prepay[j - offset];
Principal[j] += Chunks[i].Principal[j - offset];
Interest[j] += Chunks[i].Interest[j - offset];
}
if (Settings.runBacktesting)
{
foreach (KeyValuePair<Tuple<int, int, DateTime>, double> item in Chunks[i].TransProbChunk)
{
Utils.upsertDict(TransProbAgg, item.Key, item.Value);
//Create From Status - Month Totals Dictionary to create transition rates
Tuple<int, DateTime> key = new Tuple<int, DateTime>(item.Key.Item1, item.Key.Item3);
Utils.upsertDict(fromMonthTotals, key, item.Value);
}
}
}
为什么你认为这需要重构? _“平衡是双重的”_否,那么这将不会编译。也许一个'清单'。 –
您通常不会在行级重构,而是概念化(类,接口等)级别。但是,如果您看到一个在整个代码中使用很多的模式,请尝试描述它。 – Groo
这更让我的脚湿润。它可能不会。我只是好奇,假设它确实需要重构,那么这将是一个合适的方式。 – StephenWinburn