我需要使用dictionary
初始化静态EqualityComparer
,因为我在此dictionary
中使用自定义类作为键。当这个dictionary
不是静态的时我可以初始化它,但是当它被标记为静态时它不起作用并且我在初始化期间遇到异常:“在调用方法之前检查以确定对象是否为空” 。我的代码如下所述。你能告诉我我做错了什么吗?
提前谢谢。
public static Dictionary<Date, List<Name>> NameDays;
public class EqualityComparer : IEqualityComparer<Date>
{
public bool Equals(Date x, Date y)
{
return ((x.Day.Equals(y.Day)) && (x.Month.Equals(y.Month)));
}
public int GetHashCode(Date x)
{
return x.Day.GetHashCode() ^ x.Month.GetHashCode();
}
}
public static async void LoadNameDays()
{
NameDays = new Dictionary<Date, List<Name>>(new EqualityComparer());
.....
答案 0 :(得分:3)
看来你的字典是空的。您可以使用字段初始值设定项对其进行初始化,然后可以使用LoadNameDays
方法删除字典初始化代码。
public static Dictionary<Date, List<Name>> NameDays = new Dictionary<Date, List<Name>>(new EqualityComparer());
另外,我建议您制作字段readonly
以确保您正在处理相同的事情,不要无意中分配其他内容。
答案 1 :(得分:1)
您必须在声明字典时创建字典:
public static Dictionary<Date, List<Name>> NameDays =
new Dictionary<Date, List<Name>>(new EqualityComparer());
答案 2 :(得分:0)
您的静态成员必须在使用前进行设置。您可以在其包含的类构造函数中或作为字段initilizer执行此操作。它不能通过其他方法初始化。将静态成员视为属于类本身,而不是特定实例。