1

我创建了一个包含类型列表的类,并派生到我创建的另一个类。这看起来如下:

namespace MyIntegretyCheck.Common
{
    /// <summary>
    /// Description of PolicyErrors.
    /// </summary>
    public partial class PolicyErrorEndingDates
    {
        public int ID_P {get;set;}
        public DateTime DT_S_E {get;set;}
        public DateTime DT_SC_E {get;set;}

        public List<PolicyErrorDescr> Errors {get;set;}
    }

    public partial class PolicyErrorDescr
    {
        public string Field1{get;set;}
        public string Field2 {get;set;}
        public string F1IsThanF2 {get;set;}
        public string Message {get;set;}
        public int ErrorLevel {get;set;} //0= Info | 1= Warning | 2= Error

    }
}

现在我创建了一个类型的列表PolicyErrorEndingDates,添加了一个条目,然后尝试添加他的嵌套列表错误的条目,如下所示:

public List<PolicyErrorEndingDates> MyPolicyEndingDates()
{

    DAL.PolicyEndingDates ped = new DAL.PolicyEndingDates();
    List<PolicyErrorEndingDates> MyErrors = new List<PolicyErrorEndingDates>();

    foreach(var m in ped.CheckTables())
    {
        bool HasError = false;
        PolicyErrorEndingDates p = new PolicyErrorEndingDates();
        p.ID_P = m.ID_P;

        if(m.DT_S_E != m.DT_SC_E)
        {
            PolicyErrorDescr e = new PolicyErrorDescr();
            HasError = true;
            e.Field1 = "DT_S_E";
            e.Field2 = "DT_SC_E";
            e.Message = "blablabla...";
            e.ErrorLevel = 3;
            p.Errors.Add(e);
        }

        if(HasError)
            MyErrors.Add(p);
    }
}

调试器Object reference not set to an instance of an objectp.Errors.Add(e);我的if. 我做错什么了?如何创建嵌套列表的实例?

4

4 回答 4

5

您是否为 Errors 属性分配了一个List<PolicyErrorDescr>实例?

首先,我可能会Errors从外部将集合设为只读,即列表可以更改,但您不能给它一个新列表。

我会通过将设置器设为私有来做到这一点:

public List<PolicyErrorDescr> Errors { get; private set; }
                                            ^-----^
                                              this

然后我将创建一个构造函数并从中分配一个集合实例给该属性:

public PolicyErrorEndingDates()
{
    Errors = new List<PolicyErrorDescr>();
}

这应该处理空引用异常。

于 2009-08-05T10:03:37.280 回答
1

我的猜测,因为 p 是一个新实例,所以没有实例化错误列表(就像 Lasse 提到的那样)。

e.ErrorLevel = 3;
p.Errors = new List<PolicyErrorDescr>(); //add this
p.Errors.Add(e);
于 2009-08-05T10:13:26.573 回答
1

您永远不会初始化 PolicyErrorEndingDates 中的错误列表

如果您更正如下:

public partial class PolicyErrorEndingDates
    {
        public int ID_P {get;set;}
        public DateTime DT_S_E {get;set;}
        public DateTime DT_SC_E {get;set;}

        public List<PolicyErrorDescr> Errors {get;set;}
        public PolicyErrorEndingDates()
        {
            Errors = new List<PolicyErrorDescr>()
        }
    }
于 2009-08-05T10:13:34.000 回答
0

p.Errors 为空

于 2009-08-05T10:08:28.550 回答