Исключение нулевой ссылки при инициализации экземпляра частичного класса

У меня есть служба со ссылочным кодом ниже:

[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 всегда имеет значение null, и я не могу его инициализировать. Пожалуйста, покажите мне способ инициализировать и установить какое-либо значение для этого объекта. Заранее спасибо.


person codilla    schedule 14.04.2017    source источник


Ответы (1)


Как написано в вашем коде, вы можете инициализировать prev_ConsArr.item следующим образом:

prev_ConsArr.item = new Receipt[3];

Это создаст новый ArrayOfReceipt, который может содержать три объекта Receipt. Вы также можете создать конструктор для своего класса ArrayOfReceipt, который инициализирует item. Любой из этих методов устранит ваше исключение NullReferenceException.

Глядя на то, как вы используете свой класс ArrayOfReceipt, вы можете подумать об изменении типа item на List<Receipt>. Это упростит изменение количества сохраняемых классов квитанций.

В зависимости от того, что вы пытаетесь сделать, вы также можете создать метод AddReceipt в ArrayOfReceipts и переместить событие PropertyChanged в этот метод. Прямо сейчас событие PropertyChanged сработает только тогда, когда ваш класс ArrayOfReceipts перезапишет свой массив Receipts.

person Ben J    schedule 14.04.2017