C# 单击时创建对象时的空指针

C# 单击时创建对象时的空指针,c#,wpf,C#,Wpf,当我添加到header.headerItems.add(d2)时,我一直有空指针异常;其中我的headerItems是一个可观察的类型数据集合 谁能告诉我这是为什么 private void addData(Header header) { Data d2 = new Data("pol"); header.headerItems.Add(d2); } 我调用此方法的方法如下所示。其中报头是数据包类的一部分 addData(packet.header);

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

谁能告诉我这是为什么

 private void addData(Header header)
 {
        Data d2 = new Data("pol");
        header.headerItems.Add(d2);
 }
我调用此方法的方法如下所示。其中报头是数据包类的一部分

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

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

使用调试器检查packet.header是否为null,如果为null,请检查原因

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

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

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

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

使用调试器检查packet.header是否为null,如果为null,请检查原因

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

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

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

问题在于您访问空对象(标题)的字段。按以下步骤做

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

问题是您正在访问空对象(标头)的字段。按以下步骤做

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

您是否确保已初始化
数据包.标头
?价值从何而来?如果您需要更多帮助,请提供更多信息,因为我们不知道任何其他信息。也许你应该发布一部分信息包类。哦,我忘了包括它的意思。如上所述进行编辑。是的,该头已经初始化。然后检查头项是否已初始化。是否尝试使用调试器单步执行代码?异常将包含堆栈跟踪,这将是开始查找的最佳位置。您是否确保已初始化
packet.header
?价值从何而来?如果您需要更多帮助,请提供更多信息,因为我们不知道任何其他信息。也许你应该发布一部分信息包类。哦,我忘了包括它的意思。如上所述进行编辑。是的,该头已经初始化。然后检查头项是否已初始化。是否尝试使用调试器单步执行代码?异常将包含一个堆栈跟踪,这将是开始正确查找的最佳位置,因为我们没有代码应该做什么的规范,这也是允许的:)lol@SalvatorePreviti要求超出了想象。完全基于假设。@UnhandledException lol:)是的,你对这个假设更不满意,就像在网上玩扑克:)完全随机:)lol。是的,因为我们没有代码应该做什么的规范,这也是允许的:)lol@SalvatorePreviti要求超出了想象。完全基于假设。@UnhandledException lol:)是的,你对这个假设更感兴趣,就像在网上打扑克一样:)完全随机:)lol。