检查List <T>日期的最快方法

fis*_*ead 4 c# generics generic-list .net-2.0

我有一个机器已经处理的日期列表,但它没有包含机器停机的日期.我需要创建一个工作日但没有工作的列表.我不确定这样做的最好方法.我已经开始通过递增范围的所有日期并通过每次迭代整个列表来检查日期是否在列表中.我正在寻找一种更有效的方法来查找日期.

class machineday
{
 datetime WorkingDay;
}

class machinedaycollection : List<machineday>
{
public List<TimeCatEvent> GetAllByCat(string cat)
{
  _CategoryCode = cat;


  List<machineday> li = this.FindAll(delegate(machinedaydummy) { return true; });
  li.Sort(sortDate);
  return li;
}

int sortDate(machinedayevent1, machinedayevent2)
{
  int returnValue = -1;
  if (event2.date < event1.date)
  {
    returnValue = 0;
  }
  else if (event2.date == event1.date)
  {
    //descending
    returnValue = event1.date.CompareTo(event2.date);
  }
  return returnValue;
}
}
Run Code Online (Sandbox Code Playgroud)

dtb*_*dtb 6

对日期进行排序并并行迭代结果列表以递增计数器.只要计数器与当前列表元素不匹配,您就会在列表中找到缺少的日期.

List<DateTime> days = ...;
days.Sort();
DateTime dt = days[0].Date;
for (int i = 0; i < days.Length; dt = dt.AddDays(1))
{
    if (dt == days[i].Date)
    {
        Console.WriteLine("Worked: {0}", dt);
        i++;
    }
    else
    {
        Console.WriteLine("Not Worked: {0}", dt);
    }
}
Run Code Online (Sandbox Code Playgroud)

(这假设列表中没有重复的日期.)