C#如何覆盖字典ContainsKey 公开课日期 { 公共int mm; 公共int dd; 公开日期(int get\u mm,int get\u dd) { mm=获得_mm; dd=获取_dd; } } 公共字典=新字典(); 日期A=新日期(1,1) 日期B=新日期(1,1) 增加(A,1); if(dictionary.ContainsKey(B))//返回false ...
在这种情况下,如何重写Date类? 我知道这两个对象是不同的,但不知道如何使其工作您有两种方法:C#如何覆盖字典ContainsKey 公开课日期 { 公共int mm; 公共int dd; 公开日期(int get\u mm,int get\u dd) { mm=获得_mm; dd=获取_dd; } } 公共字典=新字典(); 日期A=新日期(1,1) 日期B=新日期(1,1) 增加(A,1); if(dictionary.ContainsKey(B))//返回false ...,c#,dictionary,overriding,C#,Dictionary,Overriding,在这种情况下,如何重写Date类? 我知道这两个对象是不同的,但不知道如何使其工作您有两种方法: 通过重写class Date的GetHashCode和Equals方法 使用接受一个IEqualityComparer作为参数的Dictionary构造函数 如果Date对象不是不可变的(即,在创建后不能修改其属性=>Date属性需要是只读的),则不建议使用第一种方法。因为Dictionary类在插入时基于GetHashCode值构建其内部结构。如果用于计算GetHashCode的属性发生更改,
- 通过重写class Date的
和GetHashCode
方法Equals
- 使用接受一个
作为参数的IEqualityComparer
构造函数李>Dictionary
如果
Date
对象不是不可变的(即,在创建后不能修改其属性=>Date
属性需要是只读的),则不建议使用第一种方法。因为Dictionary类在插入时基于GetHashCode
值构建其内部结构。如果用于计算GetHashCode
的属性发生更改,您将无法检索已插入词典的对象。您需要覆盖Date
的Equals
和GetHashCode
方法。或者,您可以创建一个IEqualityComparer
传递给字典,告诉它如何比较Date
obejcts。最好的方法是使用自定义相等比较器制作字典。为什么要从示例中获取对象B而不是对象A?A+B共享相同的值,为什么要保存两次?@user743414这只是一个例子。我只是想反映一下我的想法problem@gaborbozo这就是为什么我问你想做什么。
public class Date
{
public int mm;
public int dd;
public Date(int get_mm, int get_dd)
{
mm = get_mm;
dd = get_dd;
}
}
public Dictionary<Date, int> dictionary = new Dictionary<Date, int>();
Date A = new Date(1,1)
Date B = new Date(1,1)
dictionary.Add(A,1);
if(dictionary.ContainsKey(B)) //returns false
...