2013-02-19 84 views
2

我有这样限定的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属性的类并覆盖GetHashCodeEquals,但也许有更好的解决方案?

回答

15

很简单:只需使用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 
    } 

}