如何在构造函数中创建对象数组?

时间:2011-08-11 14:17:17

标签: c#

我有两个班级:

游戏

元素

我希望能够在游戏对象中定义一个元素对象数组。当我尝试这个时,我收到警告消息“..从未分配给,并且将始终具有其默认值null”;在调试器中的局部变量中,我可以看到该数组存在,但所有条目都为空。类Element工作正如我所料。如果我将元素对象分配给Main中的数组它可以工作,但是当我将代码移动到Game构造函数时则不行。

我做错了什么?我是C#的新手,所以它可能是非常基础的东西。代码如下。非常感谢。

class Element
    {
      public Element()
      {
        elements = new List<int>(3);
        elements.Add(1);
        elements.Add(2);
        elements.Add(3);

      }

        List<int> elements;

        public void PrintElement()
      {
          for (int i = 0; i < 3; i++)
          {
              Console.WriteLine("Element {0}: {0}", i + 1, elements[i]);
          }
      }

    }


class Game
    {

            public Game()
            {
                Element1 = new Element();
                Element2 = new Element();
                Element3 = new Element();
                Element[] ThisGame = new Element[3];
                ThisGame[0]= Element1;
                ThisGame[1] = Element2;
                ThisGame[2] = Element3;

            }

            public Element[] ThisGame;
            private Element Element1;
            private Element Element2;
            private Element Element3;

        public void PrintGameElement(int number)
        {
            ThisGame[number].PrintElement();
        }

    }


    class Program
    {
            Game MyGame;
        static void Main(string[] args)
        {

            Game MyGame = new Game();
            MyGame.PrintGameElement(2);


            Console.Read();
        }
    }

4 个答案:

答案 0 :(得分:3)

Game中,您要重新声明ThisGame

更改

Element[] ThisGame = new Element[3];

ThisGame = new Element[3];

答案 1 :(得分:1)

您的游戏构造函数应如下所示:

    public Game()
    {
        Element1 = new Element();
        Element2 = new Element();
        Element3 = new Element();
        ThisGame = new Element[3];
        ThisGame[0]= Element1;
        ThisGame[1] = Element2;
        ThisGame[2] = Element3;

    }

答案 2 :(得分:0)

初始化时,需要将列表对象设置为某个对象。

List<int> elements = null; 

OR

List<int> elements = new List<int>(); 

答案 3 :(得分:0)

查看此代码,它可以帮助您在代码中进行一些订单:

元素类:

class Element
    {
        //property on element to save element data
        public string ElementData { get; set; }
        public Element(string data)
        {
            ElementData = data;
        }
    }

游戏课程:

class Game
    {
        //property on Game to save all elements
        Element[] Elements { get; set; }
        public Game(Element[] elements)
        {
            Elements = elements;
        }

        public void PrintGameElements()
        {
            foreach (var element in Elements)
            {
                Console.WriteLine(element.ElementData);
            }
        }

        public void PrintElement(int index)
        {
            Console.WriteLine(Elements[index].ElementData);
        }
    }

初始化数组并将其传递给游戏的主要功能:

static void Main(string[] args)
        {
            //initialize the array 
            var elements = new[]
            {
                new Element("data x"),
                new Element("data y"),
                new Element("data z")
            };

            //pass the elements to the game
            var game = new Game(elements);

            //print the second element
            game.PrintElement(1);

            //print all elements
            game.PrintGameElements();

            Console.ReadKey();
        }
    }