【问题标题】:Partial Class Instance Initialization Null Reference Exception部分类实例初始化空引用异常
【发布时间】:2017-04-14 13:01:19
【问题描述】:

我有一个服务,参考代码如下:

[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 始终为空,我无法对其进行初始化。请告诉我一种初始化该对象并为其设置一些值的方法。提前致谢。

【问题讨论】:

    标签: c# constructor nullreferenceexception partial-classes custom-type


    【解决方案1】:

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

    prev_ConsArr.item = new Receipt[3];
    

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

    查看您使用 ArrayOfReceipt 类的方式,您可能需要考虑将 item 的类型更改为 List&lt;Receipt&gt;。这样可以更轻松地更改您存储的 Receipt 类的数量。

    根据您要执行的操作,您可能还想在 ArrayOfReceipts 中创建一个AddReceipt 方法并将您的PropertyChanged 事件移至该方法。目前,PropertyChanged 事件只会在您的 ArrayOfReceipts 类覆盖其 Receipts 数组时触发。

    【讨论】:

      猜你喜欢
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多