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

私が直面している問題は、配列の内容がnullであるということです。そして、私はこのエラーを受け取っています:

Object reference not set to an instance of an object.

Add()コマンドで配列内にリストを設定しようとすると、同じエラーが発生します。

私を正しい方向に向けてくれませんか?前もって感謝します。

4

3 に答える 3

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

最初。

于 2012-07-03T13:55:16.397 に答える
2

arrayItemsクラスとして定義したため、参照型であるの配列を作成しています。したがって、配列を初期化すると、デフォルトですべての要素が割り当てnullられます。そのため、エラーが発生します。配列の各要素を初期化する必要があります。

于 2012-07-03T13:59:53.710 に答える
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();
        }
    }
}
于 2012-07-03T14:01:08.280 に答える