0

ich einen Dienst mit Referenzcode unter:Teil Klasse Instanz Initialisierung Null Referenz Ausnahme

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

Und wenn ich möchte einen Wert eine Instanz von „ArrayOfReceipt“ oder eingestellt erstellen oder den Zugriff darauf habe ich immer das gleiche Problem auftreten: System.NullReferenceException. Dies ist der Code, wenn ich zu erstellen versuchen:

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

Unfortunatelly, prev_ConsArr.item immer null ist, und ich kann es nicht initialisiert werden. Bitte zeigen Sie mir eine Möglichkeit, dieses Objekt zu initialisieren und einen Wert festzulegen. Danke im Voraus.

Antwort

0

Die Art und Weise Ihren Code geschrieben ist, können Sie prev_ConsArr.item wie folgt initialisieren:

prev_ConsArr.item = new Receipt[3]; 

, dass eine neue ArrayOfReceipt schaffen würde, die drei Receipt Objekte halten konnte. Sie könnten auch einen Konstruktor für Ihre ArrayOfReceipt-Klasse erstellen, die item initialisiert. Jede dieser Methoden beseitigen Ihre Nullreferenceexception

Mit Blick auf die Art und Weise Sie Ihre ArrayOfReceipt Klasse verwenden, können Sie zu prüfen, welche Art von item zu List<Receipt> ändern. Das würde es einfacher machen, die Anzahl der Quittungsklassen, die Sie speichern, zu ändern.

Je nachdem, was Sie versuchen, können Sie auch eine AddReceipt-Methode in ArrayOfReceipts erstellen und das Ereignis PropertyChanged in diese Methode verschieben. Momentan wird das Ereignis PropertyChanged nur ausgelöst, wenn Ihre Klasse ArrayOfReceipts ihr Array Receipts überschreibt.

Verwandte Themen