C#将List <int>添加到类中

时间:2017-06-02 22:17:13

标签: c# .net

我有一个看起来像这样的课程:

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

我得到一个空引用异常。我不太清楚为什么,但我认为它与我班级的构造函数有关。奇怪的是,我有另一个类做了几乎相同的事情,但它并没有抛出异常。如果有人有任何线索,我会很高兴。

3 个答案:

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