2017-06-02 78 views
-1

我有一个类,它看起来是这样的:C#添加列表<int>一类

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; 

    } 

我创建类的实例,并把它添加到类型家长与线列表:

lParents.Add(new Parent(sParent1FNTemp, sParent1LNTemp,lParentChildIDTemp)); 

其中lParentChildIDTemp只是一个空整数列表。

后来,我试图说更新指定索引处的对象的INT列表:

lParents[iIndex].lChildID.Add(++iIDCounters); 

我也得到一个空引用异常。我不太清楚为什么,但我认为这与我的课程的构造函数有关。奇怪的是,我有另一个几乎完全相同的类,但它不抛出异常。如果任何人有任何线索,我会非常感激。

+1

'如果lParentChildIDTemp只是一个空整数List.' ..... '我得到一个空引用异常'。我想你回答了你自己的问题。 –

+1

您正在构造函数中分配两次'lChild_ID'。 – dotNET

+0

如果您注意到抛出异常的位置会很有帮助 - 有几个地方看起来像正常执行时可以有一个空异常......看起来它可能是一个空值传入您的构造函数 –

回答

0

滴在构造函数int参数列表,为什么不使用自动道具:

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

如果你不熟悉的自动实现的属性,看https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/auto-implemented-properties

另外,你也可以过载ctor:

public Parent(string sP1FN, string sP1LN, List<int> lCID) 
    { 
     LChildID = lCID; 
     sFirst_name1 = sP1FN; 
     sLast_name1 = sP1LN; 
    } 
+0

有很多关于他的代码风格的东西,对C#来说是非常不寻常的 - 但我假设他没有使用汽车道具,因为这是这个问题的伪代码 –

+0

也 - 这不是他的问题的答案,而是非常无关的到手头的问题...在未来,使用这个东西的评论 –

+1

@RobertPetz我明白你的意思,编辑它。 –

0

给你的属性为空,你应该确保你没有访问空值来调用方法或属性。如果你这样做,你会得到一个NullReferenceException。试试这个:

var childIds = lParents[iIndex].lChildID; 
if (childIds != null) 
{ 
    childIds.Add(++iIDCounters); 
} 

在你的构造函数,你可以检查,如果参数为空,并定义默认列表INT。如果您要设置参数,即使它为空,您也会得到空值。

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; 
    } 
} 
0

因为显然你希望能够建设过程中lChildID通过,改变构造像这样:

public Parent(string sP1FN, string sP1LN, List<int> lCID) { 
    sFirst_name1 = sP1FN; 
    sLast_name1 = sP1LN; 
    lChild_ID = lCID ?? new List<int>(); 
}