覆盖字典<日期时间,INT>的的containsKey
问题描述:
我有这样限定的Dictionary<DateTime, int>
:覆盖字典<日期时间,INT>的的containsKey
public Dictionary<DateTime, int> Days;
每个DateTime
被关联到一个int
。我想有指示功能,如果已经有一个DateTime
与同一天在我的字典里:
public int GetIntFromDate(DateTime date)
{
int i = -1;
if (Days.ContainsKey(date))
{
i= CorrespondanceJoursMatchs[date];
}
return i;
}
这是完美的,但我想的是ContainsKey
回报true
如果已经有一个DateTime
与同一天+月+年(不看小时/分钟/秒)。
事实上,我的字典不应该允许2 DateTime
指数具有相同的日/月/年。
解决方案可能是创建一个只有DateTime
属性的类并覆盖GetHashCode
和Equals
,但也许有更好的解决方案?
答
很简单:只需使用DateTime.Date
就可以实现IEqualityComparer<DateTime>
,并将该实现的实例传递给Dictionary<,>
构造函数。示例代码:
using System;
using System.Collections.Generic;
class DateEqualityComparer : IEqualityComparer<DateTime>
{
public bool Equals(DateTime x, DateTime y)
{
return x.Date == y.Date;
}
public int GetHashCode(DateTime obj)
{
return obj.Date.GetHashCode();
}
}
class Test
{
static void Main()
{
var key1 = new DateTime(2013, 2, 19, 5, 13, 10);
var key2 = new DateTime(2013, 2, 19, 21, 23, 30);
var comparer = new DateEqualityComparer();
var dictionary = new Dictionary<DateTime, string>(comparer);
dictionary[key1] = "Foo";
Console.WriteLine(dictionary[key2]); // Prints Foo
}
}