2012-07-03 36 views
0

是否可以將包含列表的類存儲在數組中?存儲數組中的列表

我對這個概念有些麻煩。

這裏是我的代碼:

我的班級叫 「arrayItems」:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace EngineTest 
{ 
    [Serializable] //List olarak save etmemiz için bu gerekli. 
    public class arrayItems 
    { 
     public List<items> items = new List<items>(); 
    } 
} 

這裏是我的數組稱爲定義 「tileItems」:

public static arrayItems[, ,] tileItems; 

以下是我創造我的陣:

Program.tileItems = new arrayItems[Program.newMapWidth, Program.newMapHeight, Program.newMapLayers]; 

我面臨的問題是我的數組的內容爲空。當我試圖通過添加填充列表的數組內()命令我得到同樣的錯誤

Object reference not set to an instance of an object.

: 我正在此錯誤。

請問您能指導我正確的方向嗎? 在此先感謝。

+0

實例化陣列'titleItems',所以空間'arrayItems'引用已經分配但,你有沒有設置爲'arrayItems'類的有效實例的引用。 – Jodrell

+0

快速解決方法是將'public class arrayItems'更改爲'public struct arrayItems',然後'arrayItems'將是一個值類型,而不是引用類型。但是,這可能會產生其他不希望的副作用。 – Jodrell

回答

2

由於您已經在類定義中初始化列表,因此不需要在循環內重新初始化arrayItems的列表屬性。

你有一個指向一堆指針的數組。所以你實際上需要首先在每個數組元素中引入一個新的arrayItems

for (int i = 0; i < newMapWidth; i++) 
{ 
    for (int j = 0; j < newMapHeight; j++) 
    { 
     for (int k = 0; k < newMapLayers; k++) 
     { 
      arrayItems[i,j,k]= new arrayitem(); 
     } 
    } 
} 
+0

謝謝James解決了它。 – Theoden

6

您需要在陣列中的每個初始化列表:

for (int i = 0; i < newMapWidth; i++) 
{ 
    for (int j = 0; j < newMapHeight; j++) 
    { 
     for (int k = 0; k < newMapLayers; k++) 
     { 
      arrayItems[i,j,k] = new arrayItems(); 
     } 
    } 
} 

第一。

+0

不應該是arrayitems [i,j,k] = new arrayItems()? – JonC

+0

您的意思是: 「Program.tileItems [x,y,z] .items = new List ();」 – Theoden

+0

@JonC:是的,修好了! –

2

您正在創建arrayItems的數組,並且它是一個引用類型,因爲您將其定義爲一個類。因此,當初始化陣列時,默認情況下所有元素將被分配null。這就是你得到錯誤的原因。你必須初始化數組中的每個元素。