C#嵌套类型列表

joh*_*n84 1 c# inner-classes

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

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

    }
}
Run Code Online (Sandbox Code Playgroud)

现在我创建了一个类型列表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);
    }
}
Run Code Online (Sandbox Code Playgroud)

调试器在我内部Object reference not set to an instance of an object的行中与消息一起崩溃.我做错了什么?如何创建嵌套列表的实例?p.Errors.Add(e);if

ang*_*son 5

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

首先,我可能会Errors从外部将集合设置为只读,也就是说,列表可以更改,但是您不能给它一个新的列表.

我将通过使setter私有来做:

public List<PolicyErrorDescr> Errors { get; private set; }
                                            ^-----^
                                              this
Run Code Online (Sandbox Code Playgroud)

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

public PolicyErrorEndingDates()
{
    Errors = new List<PolicyErrorDescr>();
}
Run Code Online (Sandbox Code Playgroud)

这应该处理null引用异常.