当您有不同组的人每天 24 小时在不同的班次上工作(比如一组工作三个 8 小时轮班,另一组工作两个 12 小时轮班,最后一组工作两个 10 小时轮班,4 小时无人值守)给予一分及时返回最近开始的班次的最直接方式是什么?
例如,我有一个 8 小时Shift的列表(BeginTime 分别是早上 6 点、下午 2 点、晚上 10 点)
 public class Shift
    {
        public string Name { get; set; }
        public TimeSpan BeginTime { get; set; }
        public int LengthHours { get; set; }
    }
我当前的代码有效(出于我的目的),但并不理想,因为它需要 startTime 并且轮班在集合中是有序的。
public Shift FindCurrentShift(DateTime startTime, DateTime endTime, List<Shift> shifts)
{
    Shift mostRecentShift = null;
    foreach (Shift aShift in shifts) {
        DateTime shiftBeginTime = DateTime.Parse(endTime.Date.Add(aShift.BeginTime).ToString());
        if (startTime.Date != endTime.Date) {
            if (shiftBeginTime.TimeOfDay > startTime.TimeOfDay) {
                shiftBeginTime = shiftBeginTime.AddDays(-1);
            }
        }
        //does this shift fall in between start and stop time
        if ((startTime < shiftBeginTime && endTime > shiftBeginTime)) {
            mostRecentShift = aShift;
        }
    }
    return mostRecentShift;
}
鉴于当前时间,我在哪个班次?有什么更简单的方法可以做到这一点?