Переопределить словарь<Datetime, int> '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 с тем же днем ​​+ месяц + год (не глядя на часы / минуты / секунды).

На самом деле мой словарь не должен допустить 2 DateTime Индекс с тем же днем ​​/ месяцем / годом.

Решением может быть создание класса только с DateTime атрибут и переопределение GetHashCode а также Equals, а может есть лучшее решение?

1 ответ

Все просто: просто реализуй 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
    }

}
Другие вопросы по тегам