如何执行while循环给定次数?

Mer*_*ert 1 c# while-loop winforms

我有这个while循环来获取下一个工作日(节假日和星期日除外)。但它是通过加上1天来计算的。我希望该天数由用户确定。我从下面的TextBox(TboxIzin)获取输入。

如何执行while循环来进行给定次数的计算?


         int i = 1;
         int sayi;
         IzinIslem i1 = new IzinIslem();
         int.TryParse(i1.TboxIzin.Text, out sayi);
Run Code Online (Sandbox Code Playgroud)
            public static DateTime GetNextWeekDay(DateTime date, 
                 IList<Holiday> holidays, IList<DayOfWeek> weekendDays)
        {
            int i = 1;
            int sayi;
            IzinIslem i1 = new IzinIslem();
            int.TryParse(i1.TboxIzin.Text, out sayi);

            // always start with tomorrow, and truncate time to be safe
            date = date.Date.AddDays(1);

            // calculate holidays for both this year and next year
            var holidayDates = holidays.Select(x => x.GetDate(date.Year))
                .Union(holidays.Select(x => x.GetDate(date.Year + 1)))
                .Where(x => x != null)
                .Select(x => x.Value)
                .OrderBy(x => x).ToArray();

            // increment to get working day
            while (true)
            {
                if (weekendDays.Contains(date.DayOfWeek) || 
                          holidayDates.Contains(date))
                    date = date.AddDays(1);
                else
                    return date;
            }

        }
Run Code Online (Sandbox Code Playgroud)

我得到的not all code paths return a value 错误,当我尝试while循环嵌套。

Gui*_* CR 5

while是一个条件循环。在这里,您将非条件放在子句中,并立即跟进条件。将条件放在while子句中:

while(weekendDays.Contains(date.DayOfWeek) || holidayDates.Contains(date)) {
    date = date.AddDays(1);
}

return date;
Run Code Online (Sandbox Code Playgroud)

出现错误的实际原因是编译器无法预测if条件是否会解析为false。如果没有,那么您的函数将永远不会返回。

使用修改后的while循环,仍然可能会发生这种情况,但是它将导致无限循环,如果您以这种方式射击自己,编译器就可以了。