如何在构造函数中创建对象数组
本文关键字:创建对象 数组 构造函数 | 更新日期: 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();
}
}