我将有一个预定日期时间字典。如果Dictonary中的任何Datetime等于当前时间,我需要调用一个方法。请告诉我为实现这一目标需要做些什么。我不希望它每天都运行。只有一次。
我将拥有包含许多记录的词典,以便查看以下数据:
Dictionary<DateTime,int> dic = new Dictionary<DateTime,int>();
Values:
10-03-2017 07:30:01 PM,1
10-03-2017 07:34:01 PM,2
10-03-2017 07:37:05 PM,3
10-03-2017 07:39:55 PM,4
这是一个值的样本,我将在100左右这样。当时间到达当前时间我需要以下面的格式调用方法传递字典值。在方法内部,我将进行处理。
ProcessValue(int val)
{
}
答案 0 :(得分:1)
我不认为这是最好的解决方案,但如果不了解您的情况,我无法提供更好的选择。
正如您所知,字典不能包含重复的键值,这听起来像是您需要的。我已经从DateTime字典中更改了它 - &gt; int,to DateTime - &gt;因此列出。
为了按秒查找项目,我实现了一个自定义相等比较器,它将使用ticks生成一个唯一的hashcode,并执行相等的比较,直至秒:
Dictionary<DateTime, List<int>> dic = new Dictionary<DateTime, List<int>>(DateSecondEqualityComparer.Instance());
private void timer1_Tick(object sender, EventArgs e)
{
List<int> values;
DateTime currentTime = DateTime.Now;
if (dic.TryGetValue(currentTime, out values))
{
foreach (var value in values)
{
ProcessValue(value);
}
// If you want to remove the date from the dictionary, uncomment the line below
// dic.Remove(currentTime);
}
}
private void ProcessValue(int val)
{
}
public class DateSecondEqualityComparer : IEqualityComparer<DateTime>
{
public static DateSecondEqualityComparer Instance()
{
return new DateSecondEqualityComparer();
}
public bool Equals(DateTime x, DateTime y)
{
return x.Date == y.Date && x.Hour == y.Hour && x.Minute == y.Minute && x.Second == y.Second;
}
public int GetHashCode(DateTime obj)
{
// ticks -> seconds
var seconds = (obj.Ticks / 10000000);
return seconds.GetHashCode();
}
}