我的Dictionary<DateTime, int>
定义如下:
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
则返回DateTime
(不看小时/分钟/秒)。
实际上,我的词典不应该允许2 DateTime
个索引具有相同的日/月/年。
解决方案可能是创建一个只有GetHashCode
属性并覆盖Equals
和{{1}}的类,但也许有更好的解决方案?
答案 0 :(得分:15)
这很简单:只需使用IEqualityComparer<DateTime>
的方式实现DateTime.Date
,并将该实现的实例传递给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
}
}