覆盖Dictionary <datetime,int>的ContainsKey </datetime,int>

时间:2013-02-19 21:20:09

标签: c# containskey

我的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}}的类,但也许有更好的解决方案?

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
    }

}