返回true false或某些数据当Time落在时间范围链中的时间范围内时?

时间:2015-05-28 11:22:04

标签: c#

我在允许/禁止活动的那一天有时间范围。 我准备了一个小班,可以保持一天的时间范围。 类的OkNok方法查找适用的句点并返回allow / forbidden。

我的问题:

  1. 如何使用<T>代替<bool> 将其设为通用。例如,它可以返回包含2个布尔值和a的类或结构 值。
  2. 如果在路上可以加快速度和/或便于数据录入
  3. 在下面的示例中,如果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));
        }
    }
    

1 个答案:

答案 0 :(得分:1)

您的问题不是很清楚,但我希望这有助于您:

//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;
        }
    }
}