C# 类的属性中的字典有什么问题?

C# 类的属性中的字典有什么问题?,c#,.net,.net-3.5,.net-4.0,C#,.net,.net 3.5,.net 4.0,为什么这个代码不起作用 public class A { public Dictionary<int, string> dic { get; set; } } class Program { public static void Main() { A a = new A(); a.dic.Add(1, "a"); } } 公共A类 { 公共字典dic{get;set;} } 班级计划 { 公共静

为什么这个代码不起作用

public class A   
{
   public Dictionary<int, string> dic { get; set; }   
}

class Program   
{
    public static void Main()
    {
        A a = new A();
        a.dic.Add(1, "a");
    }   
}
公共A类
{
公共字典dic{get;set;}
}
班级计划
{
公共静态void Main()
{
A=新的A();
a、 dic.添加(1,“a”);
}   
}
错误: System.NullReferenceException未处理
Message=对象引用未设置为对象的实例。

字典是引用类型。它的默认值为空。你的程序中没有“新字典”;可能应该有。

您尚未初始化属性,因此
a.dic
的值为空(任何引用类型的默认值)

你需要一些类似的东西:

a.dic = new Dictionary<int, string>();
a.dic=新字典();
。。。或者可以在构造函数中初始化它


另一方面,直接访问类的内部工作很少是一个好主意-这里基本上没有封装。

将a的定义更改为如下内容:

    public class A
    { public Dictionary dic;

A()

{

dic = new Dictionary();
}

    }

    class Program
    { public static void Main() { A a = new A(); a.dic.Add(1, "a");

    }   

    }
public class A
{
    public Dictionary<int, string> dic { get; set; }

    public A()
    {
        dic = new Dictionary<int, string>();
    }
}
公共A类
{
公共字典dic{get;set;}
公共A()
{
dic=新字典();
}
}
关键的一点是,您需要先初始化“dic”属性,然后才能使用它。

请参阅以帮助您下次更好地格式化代码。