2012-07-03 31 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。这就是你得到错误的原因。你必须初始化数组中的每个元素。