我有两个班级:
游戏
元素
我希望能够在游戏对象中定义一个元素对象数组。当我尝试这个时,我收到警告消息“..从未分配给,并且将始终具有其默认值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();
}
}
答案 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();
}
}