为什么为类的成员分配值会引发未设置对象的错误?

时间:2019-09-22 05:38:25

标签: c#

我有一个包含另一个类的对象的类。 现在,我想使用父类的对象将值分配给内部类的对象的成员。

例如

public class DT_FLEQ
{
   private DT_FLEQHeader headerField;

   public DT_FLEQHeader Header
    {
        get
        {
            return this.headerField;
        }
        set
        {
            this.headerField = value;
        }
    }
}


DT_FLEQ FLEquipment = new DT_FLEQ();   

FLEquipment.Header.FLTYP= "Value";

它引发错误:对象引用未设置为对象的实例。

为什么?

1 个答案:

答案 0 :(得分:0)

如错误所述,错误发生是因为Header属性未初始化且为null。您需要在分配子属性之前初始化headerField实例。

private DT_FLEQHeader headerField = new DT_FLEQHeader();

一种实现方法是在如上所述声明变量时将其初始化。但是请注意,在第一次使用之前,您也可以在其他任何地方使用它。例如,在构造函数中。

public DT_FLEQ
{
headerField = new DT_FLEQHeader();
}

或在Header属性的Setter访问器中

public DT_FLEQHeader Header
    {
        get
        {
            return this.headerField;
        }
        set
        {
            if(this.headerField == null)
            {
                 headerField = new DT_FLEQHeader();
            }     
            this.headerField = value;
        }
    }

您也可以在分配FLTYP值之前对其进行初始化。例如,

FLEquipment.Header = new DT_FLEQHeader();
FLEquipment.Header.FLTYP= "Value";

重要的一点是,在为变量headerField赋值之前,需要对其进行初始化。

替代方法是创建DT_FLEQHeader的实例并将其分配给FLEquipment.Header。

var header = new DT_FLEQHeader();
header.FLTYP= "Value";
FLEquipment.Header = header;