转到列表中的下一个项目时遇到问题

时间:2018-10-06 08:48:10

标签: c#

以下与C#有关 有4个列表:

  1. INRHolidays列表:包含所有假日和周末
  2. CashFlowDates:包含从今天起10年的所有日期
  3. CashFlowDatesFinal:在CashFlowdates中包含除INRHolidays之外的所有日期
  4. TenorDates:从现在开始包含一些特定日期,即6m,9m,12m,1y,2y,3y,4y,5y,7y和10y。

现在,我要检查TenorDates中的这些特定日期是否为假期。如果不是,则应将它们直接添加到新列表HolidayAdjustedTenorDates中,否则应添加CashFlowDates的下一个工作日。

20只是一个数字,因为我不知道如何设置边界条件。

var HolidayAdjustedTenorDates = new List<string>();

foreach (var a in TenorDates)
{
    if (CashFlowDatesFinal.Contains(a))
    { 
        HolidayAdjustedTenorDates.Add(a); 
    }
    else
    {
        for (var i = 1; i < 20; i++)
        {
             if(CashFlowDatesFinal.Contains(
                  Convert.ToDateTime(a).AddDays(i).ToShortDateString()))
             { 
                 HolidayAdjustedTenorDates.Add(
                  Convert.ToDateTime(a).AddDays(i).ToShortDateString());
             }
         }
    }
}

2 个答案:

答案 0 :(得分:0)

确切的问题是,您没有得到正确的日期,或者您不知道如何编写循环以放置边界条件?

您可以尝试一会儿循环:

int i = 1;
while(!CashFlowDatesFinal.Contains(Convert.ToDateTime(a).AddDays(i).ToShortDateString()))
{
    i++;
}
HolidayAdjustedTenorDates.Add(Convert.ToDateTime(a).AddDays(i).ToShortDateString();

答案 1 :(得分:-1)

我无法发表评论,很抱歉发布答案,但:

1-您应该真正改善代码。 C#是一种强类型语言,因此请避免使用var,而应使用实类型

2-请勿直接在a上使用,请使用临时变量。

完成此操作后,您可以避免错误并可以方便调试。

例如,在您的代码中,如果CashFlowDatesFinal包含DateTime,则无需与string(由ToShortDateString()进行比较)