2017-06-02 74 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>(); 
}