我有一个看起来像这样的课程:
public class Parent
{
private string sFirst_name1;
public string sParent1FirstName
{
get { return sFirst_name1; }
set { sFirst_name1 = value; }
}
private string sLast_name1;
public string sParent1LastName
{
get { return sLast_name1; }
set { sLast_name1 = value; }
}
private List<int> lChild_ID;
public List<int> lChildID
{
get { return lChild_ID; }
set { lChild_ID = value; }
}
public Parent(string sP1FN, string sP1LN, List<int> lCID)
{
lChild_ID= new List<int>();
sFirst_name1 = sP1FN;
sLast_name1 = sP1LN;
lChild_ID = lCID;
}
我创建了一个类的实例,并将其添加到Parent类型的List中,并带有以下行:
lParents.Add(new Parent(sParent1FNTemp, sParent1LNTemp,lParentChildIDTemp));
其中lParentChildIDTemp只是一个空整数列表。
稍后,我试图通过说:
来更新指定索引处对象的int列表lParents[iIndex].lChildID.Add(++iIDCounters);
我得到一个空引用异常。我不太清楚为什么,但我认为它与我班级的构造函数有关。奇怪的是,我有另一个类做了几乎相同的事情,但它并没有抛出异常。如果有人有任何线索,我会很高兴。
答案 0 :(得分:0)
删除ctor中的int参数列表,为什么不使用auto props:
public class Parent
{
public Parent(string sP1FN, string sP1LN)
{
LChildID = new List<int>();
sFirst_name1 = sP1FN;
sLast_name1 = sP1LN;
}
public List<int> LChildID { get; set; }
如果您不熟悉自动实施的属性,请参阅TLS mutual authentication
另外,你也可以重载ctor:
public Parent(string sP1FN, string sP1LN, List<int> lCID)
{
LChildID = lCID;
sFirst_name1 = sP1FN;
sLast_name1 = sP1LN;
}
答案 1 :(得分:0)
给你的属性为null,你应该确保你没有访问空值来调用方法或属性。如果你这样做,你将获得NullReferenceException
。试试这个:
var childIds = lParents[iIndex].lChildID;
if (childIds != null)
{
childIds.Add(++iIDCounters);
}
在构造函数中,您可以检查参数是否为null并定义默认列表int。如果你要设置参数,即使它是null,你也会得到null。
public Parent(string sP1FN, string sP1LN, List<int> lCID)
{
sFirst_name1 = sP1FN;
sLast_name1 = sP1LN;
if (lCID == null)
{
lChild_ID = new List<int>();
}
else
{
lChild_ID = lCID;
}
}
答案 2 :(得分:0)
由于显然您希望能够在构造期间传递lChildID
,因此更改构造函数:
public Parent(string sP1FN, string sP1LN, List<int> lCID) {
sFirst_name1 = sP1FN;
sLast_name1 = sP1LN;
lChild_ID = lCID ?? new List<int>();
}