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.MyDictionary
是null
所以它崩溃了,因为它是null.Add
那我该怎么办?
答案 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)
}