重新计算链接对象的列表



我有某种财务报告,其中每一行都是依赖于前一行的对象。我需要得到这些物品的清单。当我计算每一行时,我需要分析它的值,并在需要时进行一些修复。

这是我的ReportRow类:

public class ReportRow 
{
public ReportRow (ReportRow  previousRow)
{
PreviousRow = previousRow;
}
public ReportRow PreviousRow;
private decimal? _bankRest;
public decimal BankRest
{
get
{
if (!_bankRest.HasValue)
_bankRest = PreviousRow.BankRest - CurrentInvestments;
return _bankRest.Value;
}
set
{
_bankRest = value;
}
}
public decimal CurrentInvestments => Sum1 + Sum3;
public decimal Sum1 { get; set; }//here is some formula
public decimal Sum3 { get; set; }//here is some other formula
}

这门课很简单,但我认为它可以帮助理解这个问题。在这种情况下,CurrentInvestments可能会变得太大,BankRest将变为负值。(CurrentInvestments的公式更复杂,可能会变得格外庞大(。

以下是我如何收集报告数据。

public void GetReport()
{
ReportRow firstRaw = GetFirstRow();//here i somehow get first row to start calculation
List<ReportRow> report = new List<ReportRow>(); //the full report
ReportRow previous = firstRaw;
for (int i = 0; i < 100000; i++)
{
ReportRow next = new ReportRow(previous);
AnalizeAndFix(next);//Here is where I have a problem
report.Add(next);
previous = next; //current becomes previous for next iteration 
}
}

我在AnalyzeAndFix(下一个(函数中遇到问题。如果当前期间的BankRest为负(<0(,我需要取消上一个期间的CurrentInvestments(使CurrentInvestments=0,这将使上一个BankRest更大(。如果这没有帮助,我需要更进一步,取消那一行的投资。然后检查currentRaw BankRest。我需要重复6次。如果将CurrentInvestments设置为前六个raw中的0没有帮助,那么抛出一个异常。在总报告中,所有被触摸的时段都需要更新。我只修复了前一行,但我不知道如何再修复5次。这是我的AnalyzeAndFix 的代码

private void AnalizeAndFix(ref ReportRow current)
{
if (current.BankRest < 0)
{
int step = 0;
while (current.BankRest < 0 || step < 6)
{
step++;
var previous = current.PreviousRow;
previous.CancellInvestments(); //I set CurrentInvestments to 0
current = new ReportRow(previous); // create a new report based on recalculated previous
}
}
}

如果我使用这个方法,最终的报告会显示我重新计算的当前行和前一行(我想(。然而,我不知道如何再做5次,所以所有受影响的行都将在最终报告中显示更改。或者我可能需要重新思考整个系统,用其他方式做我需要的事情?

您应该从ReportRow类中删除链表功能,转而使用LinkedList类。该类提供了用于添加/删除节点(节点是一个对象,它包含一行以及指向上一行和下一行的指针(以及导航到上一个和下一个节点的内置方法。

相关内容

  • 没有找到相关文章

最新更新