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;-)我会改正的。谢谢马特;-)我会改正的。