c# - 覆盖 Dictionary<Datetime,int> 的 ContainsKey

标签 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具有相同的日+月+年(不看小时/分钟/秒)。

事实上我的字典不应该允许 2 DateTime索引具有相同的日/月/年。

一个解决方案可能是创建一个只有 DateTime 的类属性并覆盖 GetHashCodeEquals ,但也许有更好的解决方案?

最佳答案

很简单:只需执行 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
    }

}

关于c# - 覆盖 Dictionary<Datetime,int> 的 ContainsKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14967653/

相关文章:

c# - 关联文件类型和图标

c# - 在 C# 中的字符串数组中搜索 Array.FindIndex 时出现 Null 异常

c# - 自定义类用作字典中的键但找不到键

java - hashmap.containskey不能将文件的第一个单词与以后出现的其他单词识别为同一单词

java - 为什么containsKey没有找到key?

c# - Dictionary ContainsKey 似乎不适用于 string[] 键

c# - IEnumerable<XElement> 和 foreach

c# - Wpf 递归绑定(bind)

c# - 为wpf mvvm应用程序设置字体系列的用户首选项