创建新项目并将其添加到新词典

时间:2014-08-07 16:14:19

标签: c#

public class Employee
{
   public Dictionary<key, MyClass>  MyDictionary;
   // ....
}

MyClass cls;

if(employeeObject.MyDictionary != null && employeeObject.MyDictionary.ContainsKey(dicKey)
{
  // .... 
}
else
{
  MyClass cls = new MyClass();
  myclass.Name = "John";
  //...set some other properties on it

  employeeObject.MyDictionary.Add(dicKey, cls)
}

首先,我检查一下我的对象是否为空,然后创建它,但即使我在else部分创建它,然后我想在最后一行添加它,仍然它说employeeObject.MyDictionarynull所以它崩溃了,因为它是null.Add

那我该怎么办?

2 个答案:

答案 0 :(得分:2)

您应该在使用之前初始化字典:

public class Employee
{
   public Dictionary<key, MyClass> MyDictionary = new Dictionary<key, MyClass>();

}

否则,类字段将具有默认值,对于引用类型,它是null。见C# Specification 10.4.4 Field initialization

  

字段的初始值,无论是静态字段还是静态字段   instance field,是字段的默认值(第5.2节)   类型。

答案 1 :(得分:1)

您刚刚宣布了Dictionary,但尚未对其进行初始化。您可以在声明时或在构造函数中执行此操作。

 public Dictionary<key, MyClass>  MyDictionary = new Dictionary<key, MyClass>();

或者在构造函数中:

public class Employee
{
    public Dictionary<key, MyClass> MyDictionary;
    // ....

    public Employee()
    {
        MyDictionary = new Dictionary<key, MyClass>();
    }
}

对于你的问题:

  

首先,我检查一下我的对象是否为空,然后创建它,   但即使我在其他部分创建它,

您检查字典是否为null,但是您没有在else部分中实例化它,而是创建MyClass的对象。这对字典没有影响。

你可以这样做:

else
{
  employeeObject.MyDictionary = new Dictionary<key, MyClass>();
  MyClass cls = new MyClass();
  myclass.Name = "John";
  //...set some other properties on it

  employeeObject.MyDictionary.Add(dicKey, cls)
}