当Time属于Time Ranges链中的Time Range时,返回true、false或某些数据

本文关键字:Time false true 数据 返回 Ranges 属于 Range | 更新日期: 2023-09-27 17:50:57

我有一天中允许/禁止活动的时间范围。我准备了一个小课堂,可以容纳一天的时间范围。该类的OkNok方法查找适用的时间段,并返回允许/禁止的时间段。

我的问题:

  1. 如何使用<T>代替<bool> 使其通用。例如,它可以返回一个包含2个布尔值和a的类或结构价值。
  2. 如果在路上,它可以使它更快和/或方便更容易的数据输入

在下面的例子中,如果时间在t1-t2之间为,它将返回true。t2-t3 false, t3-t4 true, t4 之后为false

class Program
{
    static void Main(string[] args)
    {
        TimeSpan t1 = new TimeSpan(8, 48, 0);
        TimeSpan t2 = new TimeSpan(9, 56, 0);
        TimeSpan t3 = new TimeSpan(10, 5, 0);
        TimeSpan t4 = new TimeSpan(13, 30, 0);
        TO TO = new TO { Ti = t1, Ok = true, NT = new TO { Ti = t2, Ok = false, NT = new TO { Ti = t3, Ok = true, NT = new TO { Ti = t4, Ok = false } } } };
        Console.WriteLine("The time now is considered " + TO.OkNok(DateTime.Now));
        Console.ReadLine();
    }
}
public class TO
{
    public TimeSpan Ti;
    public bool Ok;
    public TO NT;
    public bool OkNok(DateTime Time)
    {
        return OkNok(Time.TimeOfDay);
    }
    public bool OkNok(TimeSpan currentTime)
    {
        if (NT == null)
            return Ok;
        else if (currentTime > Ti && currentTime <= NT.Ti)
            return (Ok);
        else return (NT.OkNok(currentTime));
    }
}

当Time属于Time Ranges链中的Time Range时,返回true、false或某些数据

你的问题不是很清楚,但我希望这对你有所帮助:

//1) I want this class to be able to hold not just a true/false status, but a generic type T, so that it can return more data...
//2) If on the way it's possible to write it in a way that it would run faster and/or facilitate easier data entry.
class Program {
    static void Main(string[] args) {
        TimeSpan t1 = new TimeSpan(8, 48, 0);
        TimeSpan t2 = new TimeSpan(9, 56, 0);
        TimeSpan t3 = new TimeSpan(10, 5, 0);
        TimeSpan t4 = new TimeSpan(13, 30, 0);
        TO<bool> TO = new TO<bool>(t1, true) {
            new TO<bool>(t2, false) {
                new TO<bool> (t3, true) {
                    new TO<bool>(t4, false)
                }
            }
        };
        Console.WriteLine("The time now is considered " + TO.OkNok(DateTime.Now));
        Console.ReadLine();
    }
}
public class TO<T> : IEnumerable<TO<T>> {
    public TimeSpan Ti;
    public T Ok;
    public TO<T> NT;
    public TO(TimeSpan timeSpan, T ok) {
        this.Ti = timeSpan;
        this.Ok = ok;
    }
    public T OkNok(DateTime Time) {
        return OkNok(Time.TimeOfDay);
    }
    public T OkNok(TimeSpan currentTime) {
        if(NT == null) {
            return Ok;
        }
        if(currentTime > Ti && currentTime <= NT.Ti) {
            return Ok;
        }
        return NT.OkNok(currentTime);
    }
    public void Add(TO<T> nt) {
        this.NT = nt;
    }
    IEnumerator<TO<T>> IEnumerable<TO<T>>.GetEnumerator() {
        yield return this;
        if(NT != null) {
            yield return NT;
        }
    }
    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
        yield return this;
        if(NT != null) {
            yield return NT;
        }
    }
}