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

时间:2011-10-31 03:12:14

标签: c# wpf

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

类型的可观察集合

任何人都可以告诉我这是为什么?

 private void addData(Header header)
 {
        Data d2 = new Data("pol");
        header.headerItems.Add(d2);
 }

调用此方法的方法如下所示。其中头部是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; }
    }
}

我的数据类

  public class Data
{
    private String sDatavalue;

    public Data(String datavalue)
    {
        this.sDatavalue = datavalue;

    }

    public string datavalue
    {
        get { return sDatavalue; }
        set { sDatavalue = datavalue; }
    }

}

2 个答案:

答案 0 :(得分:3)

问题是您访问空对象(标题)的字段。如下所示

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);
 }

答案 1 :(得分:2)

参数标头可能为空。 正如代码那样,我们现在还不知道为什么参数头为空。

检查调试器是否为packet.header为空,如果是,请检查原因。

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

其他可能的原因,问题是header.headerItems。 如果header不为null,则headerItems可以为null。 检查它,检查它是否在头构造函数中正确初始化或必须初始化的位置。

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