0

J'ai un service avec le code de référence ci-dessous:Initialisation partielle instance classe nulle référence Exception

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

Et, quand je veux créer une instance de « ArrayOfReceipt » ou définir une valeur, ou l'accès, je toujours rencontrer le même problème: System.NullReferenceException. Ce est le code lorsque je tente de créer:

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 est toujours nulle, et je ne peux pas l'initialiser. S'il vous plaît montrez-moi un moyen d'initialiser et de mettre de la valeur à cet objet. Merci d'avance.

Répondre

0

La façon dont votre code est écrit, vous pouvez initialiser prev_ConsArr.item comme ceci:

prev_ConsArr.item = new Receipt[3]; 

Cela créerait une nouvelle ArrayOfReceipt qui pourrait contenir trois objets de reçus. Vous pouvez également créer un constructeur pour votre classe ArrayOfReceipt qui initialise item. L'une de ces méthodes va éliminer votre NullReferenceException

En regardant la façon dont vous utilisez votre classe ArrayOfReceipt, vous pouvez envisager de changer le type de item en List<Receipt>. Cela faciliterait la modification du nombre de classes de reçus que vous stockez. En fonction de ce que vous essayez de faire, vous pouvez également créer une méthode AddReceipt dans ArrayOfReceipts et déplacer votre événement PropertyChanged vers cette méthode. À l'heure actuelle, l'événement PropertyChanged se déclenche uniquement lorsque votre classe ArrayOfReceipts écrase son tableau de Receipts.