检查特定日期是否存在于给定周的设定范围内并添加到列表

Check specific days exist in a set range of given weeks and add to list

获取和return获取 3 周范围内的特定日期列表的最佳选择是什么?

我的意图是根据交付中心指定的可用日期创建交付日期

public List<DayOfWeek> DeliveryDays { get; set; }

DeliveryDays 包含 0-6 的设置值(0 表示星期日,1 表示星期一,等等)

我想获取这些值,将它们传递给接下来 3 周的日期,以及 return 列表中的那些交货天数(因此只有那些中心可以在 select 天订购)。

这是我目前的情况:

public List<DateTime> CalculateAvailableDeliveryDates()
        {

            //Loop through 3 weeks of days
            DateTime today = DateTime.Today;                                                            //Specify today's date
            DateTime totalDateCount = today.AddDays(1);                                                 //Plus one day on each time counted

            var dates = Enumerable.Range(0, 21).Select(days => totalDateCount.AddDays(days)).ToList();  //Count from 0 to 21 (3 weeks worth of days). On each count, run totalDateCount

            //if exists in deliveryDayList
                //add to dates via dates.Add func

            if (DeliveryDays.Contains(DayOfWeek.Monday))
            {
                //action
            } //and so on for each day

            //return specific dates from date range
            return dates;
        }

目前我得到 21 天的读数。 if 语句什么都不做,只是作为我的逻辑的一个例子。

最好的方法是:与其先获取列表,不如根据每个中心的 DeliveryDates 检查并嵌套 if/case 语句,然后 return 将它们放入列表中?

提前致谢。

给定 DayOfWeek 列表,您可以 select 接下来 21 天中与使用 System.Linq 的一周中的某一天相匹配的所有日期。 Enumerable.Range select 是一系列数字,Select 将 select 一堆 DateTime 代表 Today 加上一些天数的对象,并且Where用于筛选结果,比较每个日期的DayOfWeek是否存在于DeliveryDays中:

List<DayOfWeek> DeliveryDays = new List<DayOfWeek>();

public List<DateTime> GetAvailableDeliveryDates()
{
    // 1. Get a range of numbers representing the days to add
    //      to today, which will make up our range of dates
    // 2. Select a date using Today.AddDays for each number 
    // 3. Filter on only days which are contained in DeliveryDays

    return Enumerable.Range(0, 21)  // Define the range           
        .Select(i => DateTime.Today.AddDays(i))  // Select the range
        .Where(date => DeliveryDays.Contains(date.DayOfWeek))  // Filter the range
        .ToList();
}