0
        bgList.Add(bg1);
        bgList.Add(bg2);
        bgList.Add(bg3);
        bgList.Add(bg4);
        bgList.Add(bg5);

        //Initialize all background objects
        for (int i = 0; i < bgList.Count; i++)
        {
            bgList[i] = new Sprite();
            bgList[i].Scale = 2.0f;
        }

これはこれを行うための合法的な方法ですか?基本的に、質問は「for ループを使用してオブジェクトのリストを初期化できますか?」に要約されます。

bg1、bg2、bg3、bg4、および bg5 オブジェクトで「このオブジェクトが null になることはありません」という警告が表示されるので、この手法が許可されていないのではないかと考えています。

4

2 に答える 2

2

これらのステートメントは同等ではありません。

bg1 = new Sprite();

bgList.Add(bg1);
bgList[0] = new Sprite();

後者は、新しいインスタンスへの参照を に割り当てませんbg1。新しいインスタンスを 0 番目の場所に格納するだけです。

したがって、コレクションとループを使用して多数の変数をインスタンス化することは、作業の近道ではありません。各変数を明示的にインスタンス化するか、最初から配列またはコレクションを使用する必要があります。

于 2013-02-01T00:26:58.617 に答える
0

foreach の方が確かに簡単で、それを実行できるはずですが、ループ内のアイテムを次のように追加することもできます。

  for (int i = 0; i < bgList.Count; i++)
        {
            var bglistitem = new Sprite()
            bhlistitem.Scale = 2.0f;
            bgList.Add(bglistitem);
        }
于 2013-02-01T00:27:11.277 に答える