C#嵌套类型化列表

C#嵌套类型化列表,c#,inner-classes,C#,Inner Classes,我创建了一个包含类型化列表的类,并派生到我创建的另一个类。情况如下: namespace MyIntegretyCheck.Common { /// <summary> /// Description of PolicyErrors. /// </summary> public partial class PolicyErrorEndingDates { public int ID_P {get;set;}

我创建了一个包含类型化列表的类,并派生到我创建的另一个类。情况如下:

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

    }
}
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);
    }
}
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>()
        }
    }

调试器崩溃,消息
对象引用未设置为对象的实例
,位于
p.Errors.Add(e)行在我的
中,如果
。我做错了什么?如何创建嵌套列表的实例?

是否将
列表
实例分配给Errors属性

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

我会将setter设置为私有:

public List<PolicyErrorDescr> Errors { get; private set; }
                                            ^-----^
                                              this
公共列表错误{get;private set;}
^-----^
这
然后我将创建一个构造函数并从中为该属性分配一个集合实例:

public PolicyErrorEndingDates()
{
    Errors = new List<PolicyErrorDescr>();
}
公共政策ErrorEndingDates() { 错误=新列表(); }

这将处理空引用异常。

是否为Errors属性分配了
列表
实例

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

我会将setter设置为私有:

public List<PolicyErrorDescr> Errors { get; private set; }
                                            ^-----^
                                              this
公共列表错误{get;private set;}
^-----^
这
然后我将创建一个构造函数并从中为该属性分配一个集合实例:

public PolicyErrorEndingDates()
{
    Errors = new List<PolicyErrorDescr>();
}
公共政策ErrorEndingDates() { 错误=新列表(); }

这应该考虑空引用异常。

p.Errors为空

p.Errors为空

我猜,由于p是一个新实例,错误列表没有实例化(如Lasse所述)

e.ErrorLevel=3;
p、 错误=新列表()//加上这个
p、 添加(e);

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

e.ErrorLevel=3;
p、 错误=新列表()//加上这个
p、 添加(e);

您从未初始化PolicyErrorEndingDates中的错误列表

如果您更正如下:

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

    }
}
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);
    }
}
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>()
        }
    }
公共部分类策略ErrorEndingDates
{
公共int ID_P{get;set;}
公共日期时间DT_S_E{get;set;}
公共日期时间DT_SC_E{get;set;}
公共列表错误{get;set;}
公共政策ErrorEndingDates()
{
错误=新列表()
}
}

您从未初始化PolicyErrorEndingDates中的错误列表

如果您更正如下:

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

    }
}
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);
    }
}
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>()
        }
    }
公共部分类策略ErrorEndingDates
{
公共int ID_P{get;set;}
公共日期时间DT_S_E{get;set;}
公共日期时间DT_SC_E{get;set;}
公共列表错误{get;set;}
公共政策ErrorEndingDates()
{
错误=新列表()
}
}

+1:写了同样的东西,只是为了意识到您更快:o)感谢您的回复我刚刚完成了错误描述。+1:写了同样的东西,只是为了意识到您更快:o)感谢您的回复我刚刚完成了错误描述。谢谢Matt;-)我会改正的。谢谢马特;-)我会改正的。