使该代码递归的最佳方法是什么

发布于 2024-12-11 07:19:44 字数 715 浏览 0 评论 0原文

我必须编辑一些具有 suggestDate (作为名为 minDate 的 DateTime 对象)和一组中断日期的代码。给定一个提议的日期,它会尝试查看该日期是否有效(不是限制日期)。如果这是一个限制日期,请继续检查第二天,直到找到不是有效结账日期的日期。现有的代码看起来像这样

if ( blackoutDates.Contains(minDate))
        {
            minDate = minDate.AddDays(1);
            dateOffset = dateOffset + 1;
            if ( blackoutDates.Contains(minDate))
            {
                minDate = minDate.AddDays(1);
                dateOffset = dateOffset + 1;
                if (blackoutDates.Contains(minDate))
                {
                    minDate = minDate.AddDays(1);
                    dateOffset = dateOffset + 1;
                }
            }
        }

显然这里有一个重复的模式,我试图找出清理这段代码并使其优雅的最佳方法。

I have to edit some code that has a proposedDate (as a DateTime object called minDate) and an array of blackout dates. Given a proposed Date, it tries to see if this is valid (NOT a blackout dates). If it is a blackout date, then keep checking the next day until you find a date that is not a valid checkout date. The existing code looks like this

if ( blackoutDates.Contains(minDate))
        {
            minDate = minDate.AddDays(1);
            dateOffset = dateOffset + 1;
            if ( blackoutDates.Contains(minDate))
            {
                minDate = minDate.AddDays(1);
                dateOffset = dateOffset + 1;
                if (blackoutDates.Contains(minDate))
                {
                    minDate = minDate.AddDays(1);
                    dateOffset = dateOffset + 1;
                }
            }
        }

Clearly there is a repeated pattern here and I am trying to figure out the best way to clean up this code and make it elegant.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

音栖息无 2024-12-18 07:19:44

不需要递归。您可以循环执行此操作。

while(blackoutDates.Contains(minData)){
  minData = minData.AddDays(1);
  ++dataOffset;
 }

我不知道这是什么语言,但首先检查是否已经有一个标准 API 可以完成您需要的操作。

No need for recursion. You can do this in a loop.

while(blackoutDates.Contains(minData)){
  minData = minData.AddDays(1);
  ++dataOffset;
 }

I don't know what language is this, but check if there is already a standard API for doing what you need first.

七七 2024-12-18 07:19:44

我不会让它递归。我会将其设为 while 循环:

while(blackoutDates.Contains(minDate))
{
    minDate = minDate.AddDays(1);
    dateOffset = dateOffset + 1;
}

递归可以表达循环,但循环结构在其设计的上下文中使用时通常会更清晰。它们还使得访问循环范围之外的数据比递归(特别是局部变量)更简单。

I wouldn't make it recursive. I would make it a while loop:

while(blackoutDates.Contains(minDate))
{
    minDate = minDate.AddDays(1);
    dateOffset = dateOffset + 1;
}

Recursion can express loops, but looping constructs are usually clearer when used in the context they are designed for. They also make it a bit simpler to reach data that is outside the scope of the loop than recursion does (specifically local variables).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文