在单击创建对象时为空指针

本文关键字:空指针 创建对象 单击 | 更新日期: 2023-09-27 18:13:03

当我添加到header.headerItems.Add(d2)时,我一直有空指针异常;其中我的headerItems是Data类型的可观察集合

谁能告诉我这是为什么?

 private void addData(Header header)
 {
        Data d2 = new Data("pol");
        header.headerItems.Add(d2);
 }
调用这个方法的

my Method如下所示。其中header是Packet类的一部分。

addData(packet.header);

我的头类

public class Header
    {
    private ObservableCollection<Data> headerCollection;
    private String sheadervalue;
    public Header(String headervalue)
    {
        sheadervalue = headervalue;
    }
    public ObservableCollection<Data> headerItems
    { get { return headerCollection; } }
    public string headervalue
    {
        get { return sheadervalue; }
        set { sheadervalue = headervalue; }
    }
}

My data class

  public class Data
{
    private String sDatavalue;
    public Data(String datavalue)
    {
        this.sDatavalue = datavalue;
    }
    public string datavalue
    {
        get { return sDatavalue; }
        set { sDatavalue = datavalue; }
    }
}

在单击创建对象时为空指针

问题是您访问空对象(标头)的字段。按如下操作

private void addData(Header header)
 {
    if(null == header)
    {
       // if header null what you can do... e.g log header is null 
       return; 
    }
    if(null == header.headerItems)
    {
        header.headerItems = ....; // create new header item collection 
    }
    Data d2 = new Data("pol");
    header.headerItems.Add(d2);
 }

参数头可能为空。正如代码,现在,我们不知道为什么参数头是空的。

使用调试器检查数据包。头文件为空,如果为空,检查原因。

可能原因,您忘记在构造函数中初始化它。其他可能的原因是,您忘记在某处设置header的值。

其他可能的原因,问题是header.headerItems。如果header不为空,headerItems可能为空。检查它,检查它是否在头构造函数中被正确初始化,或者在必须初始化的地方。

为什么不使用调试器?使用调试器,您可以看到每个变量的状态。