C# 添加到嵌套列表时的NullReference

C# 添加到嵌套列表时的NullReference,c#,nested-lists,C#,Nested Lists,我有课 public class Gallery { public string method { get; set; } public List<List<object>> gidlist { get; set; } public int @namespace { get; set; } } 公共类库 { 公共字符串方法{get;set;} 公共列表gidlist{get;set;} public int@namespace{get;set;}

我有课

public class Gallery
{
    public string method { get; set; }
    public List<List<object>> gidlist { get; set; }
    public int @namespace { get; set; }
}
公共类库
{
公共字符串方法{get;set;}
公共列表gidlist{get;set;}
public int@namespace{get;set;}
}
按钮代码

private void button1_Click(object sender, EventArgs e)
{
    List<object> data = new List<object>();
    data.Add(618395);
    data.Add("0439fa3666");

    Gallery jak = new Gallery();
    jak.method = "gdata";
    jak.gidlist.Add(data);
    jak.@namespace = 1;

    string json = JsonConvert.SerializeObject(jak);
    textBox2.Text = json;
}
private void按钮1\u单击(对象发送者,事件参数e)
{
列表数据=新列表();
新增数据(618395);
数据。添加(“0439fa3666”);
画廊jak=新画廊();
jak.method=“gdata”;
jak.gidlist.Add(数据);
jak@namespace=1;
字符串json=JsonConvert.SerializeObject(jak);
textBox2.Text=json;
}

这里我得到System.NullReferenceException。如何将项目添加到gidlist?

您得到了它,因为您现在在jak中初始化了列表

你可以:

  • 在此处添加默认构造函数并初始化列表:

    public class Gallery
    {
        public Gallery()
        {
            gidlist = new List<List<object>>();
        }
    
        public string method { get; set; }
        public List<List<object>> gidlist { get; set; }
        public int @namespace { get; set; }
    }
    
    公共类库
    {
    公众席()
    {
    gidlist=新列表();
    }
    公共字符串方法{get;set;}
    公共列表gidlist{get;set;}
    public int@namespace{get;set;}
    }
    
  • 如果在C#6.0中,则可以使用自动属性初始值设定项:

    public List<List<object>> gidlist { get; set; } = new List<List<object>>()
    
    public List gidlist{get;set;}=new List()
    
  • 如果在C#6.0下,并且不希望为某些 原因:

    private List _gidlist=new List();
    公开名单
    {
    获取{return\u gidlist;}
    设置{u gidlist=value;}
    }
    
  • 您可以在使用之前对其进行初始化(我不建议使用此选项)

    Gallery jak=new Gallery();
    jak.method=“gdata”;
    jak.gidlist=新列表();
    jak.gidlist.Add(数据);
    jak@namespace=1;
    

  • 如果在C#6.0之前,最佳实践将是选项1。如果是6.0或更高版本,则选项2。

    可能是Cool的副本,不知道C#6.0中的自动属性初始值设定项
    private List<List<object>> _gidlist = new List<List<object>>(); 
    public List<List<object>> gidlist 
    {
        get { return _gidlist; } 
        set { _gidlist = value; }
    }
    
    Gallery jak = new Gallery();
    jak.method = "gdata";
    jak.gidlist = new List<List<object>>();
    jak.gidlist.Add(data);
    jak.@namespace = 1;