使用EqualityComparer初始化静态字典

时间:2013-12-27 12:57:54

标签: c# dictionary static initialization async-await

我需要使用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());
        .....

3 个答案:

答案 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执行此操作。它不能通过其他方法初始化。将静态成员视为属于类本身,而不是特定实例。

Read this.