Переопределить словарь<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
}
}