0

我有一個服務,參考下面的代碼:部分類實例初始化空引用異常

[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永遠是空的,我不能初始化。請告訴我一種初始化方法併爲此對象設置一些值。提前致謝。

回答

0

你編寫代碼的方式,你可以像這樣初始化prev_ConsArr.item:

prev_ConsArr.item = new Receipt[3]; 

這將創建一個新的ArrayOfReceipt,可以容納三個收納對象。您還可以爲您的ArrayOfReceipt類創建一個構造函數,初始化item。這些方法都可以消除您的NullReferenceException

查看您使用ArrayOfReceipt類的方式,您可能需要考慮將item的類型更改爲List<Receipt>。這可以更容易地更改您正在存儲的收據類的數量。

根據您正在嘗試執行的操作,您可能還希望在ArrayOfReceipts中創建AddReceipt方法,並將您的PropertyChanged事件移至該方法。現在,PropertyChanged事件只會在您的ArrayOfReceipts類覆蓋其Receipts的數組時觸發。