当Time属于Time Ranges链中的Time Range时,返回true、false或某些数据
本文关键字:Time false true 数据 返回 Ranges 属于 Range | 更新日期: 2023-09-27 17:50:57
我有一天中允许/禁止活动的时间范围。我准备了一个小课堂,可以容纳一天的时间范围。该类的OkNok方法查找适用的时间段,并返回允许/禁止的时间段。
我的问题:
- 如何使用
<T>
代替<bool>
使其通用。例如,它可以返回一个包含2个布尔值和a的类或结构价值。 - 如果在路上,它可以使它更快和/或方便更容易的数据输入。
在下面的例子中,如果时间在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) 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;
}
}
}