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

本文关键字:创建对象 数组 构造函数 | 更新日期: 2023-09-27 18:05:08

我有两个类:

游戏

元素

我希望能够在游戏对象中定义元素对象数组。当我尝试这样做时,我得到警告信息"…永远不会被赋值,并且始终具有其默认值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();
        }
    }

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

Game中,您正在重新声明ThisGame

改变
Element[] ThisGame = new Element[3];

ThisGame = new Element[3];

你的Game构造函数应该是这样的:

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

您需要在初始化list对象时设置它。

List<int> elements = null; 

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

看看这段代码,它可能会帮助你在你的代码中做一些排序:

元素类别:

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