部分类实例初始化空引用异常

问题描述:

我有一个服务,参考下面的代码:部分类实例初始化空引用异常

[System.Xml.Serialization.SoapTypeAttribute(Namespace="urn:customer")] 
public partial class Receipt : object, System.ComponentModel.INotifyPropertyChanged { 

    private int counternoField; 

    private double activekwhField; 


    /// <remarks/> 
    [System.Xml.Serialization.SoapElementAttribute("counter-no")] 
    public int counterno { 
     get { 
      return this.counternoField; 
     } 
     set { 
      this.counternoField = value; 
      this.RaisePropertyChanged("counterno"); 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.SoapElementAttribute("active-km")] 
    public double activekm { 
     get { 
      return this.activekm Field; 
     } 
     set { 
      this.activekmField = value; 
      this.RaisePropertyChanged("activekm"); 
     } 
    } 

    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; 

    protected void RaisePropertyChanged(string propertyName) { 
     System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; 
     if ((propertyChanged != null)) { 
      propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 
[System.Xml.Serialization.SoapTypeAttribute(Namespace="urn:customer")] 
public partial class ArrayOfReceipt : object, System.ComponentModel.INotifyPropertyChanged { 

    private Receipt[] itemField; 

    /// <remarks/> 
    public Receipt[] item { 
     get { 
      return this.itemField; 
     } 
     set { 
      this.itemField = value; 
      this.RaisePropertyChanged("item"); 
     } 
    } 

    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; 

    protected void RaisePropertyChanged(string propertyName) { 
     System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; 
     if ((propertyChanged != null)) { 
      propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

而且,当我要创建“ArrayOfReceipt”的实例,或者设置一个值,或访问它,我总是遇到同样的问题:System.NullReferenceException。 这是代码,当我尝试创建:

var prev_Cons = new myService.Receipt(); 
prev_Cons.counterno = 1; 
prev_Cons.activekm = 3265; 
myService.ArrayOfReceipt prev_ConsArr = new myService.ArrayOfReceipt(); 
prev_ConsArr.item.SetValue(prev_Cons, 0); 

可惜的是,prev_ConsArr.item永远是空的,我不能初始化。请告诉我一种初始化方法并为此对象设置一些值。提前致谢。

你编写代码的方式,你可以像这样初始化prev_ConsArr.item:

prev_ConsArr.item = new Receipt[3]; 

这将创建一个新的ArrayOfReceipt,可以容纳三个收纳对象。您还可以为您的ArrayOfReceipt类创建一个构造函数,初始化item。这些方法都可以消除您的NullReferenceException

查看您使用ArrayOfReceipt类的方式,您可能需要考虑将item的类型更改为List<Receipt>。这可以更容易地更改您正在存储的收据类的数量。

根据您正在尝试执行的操作,您可能还希望在ArrayOfReceipts中创建AddReceipt方法,并将您的PropertyChanged事件移至该方法。现在,PropertyChanged事件只会在您的ArrayOfReceipts类覆盖其Receipts的数组时触发。