用数组学习C#问题(数组数据消失)

Idg*_*rad 1 c# scope class multidimensional-array

这可能是一个范围问题,但以下代码已经死亡.我从2个类,Cell和Map构建了一个多维数组.地图是一个X×Y大小的单元格网格.到目前为止很正常(当我学习一门新语言时,我会继续重写这个相同的程序).为简洁起见,我将发布类和一个反映错误的基本测试.当我去打印地图时,我在打印机期间初始化的整个网格阵列在我打印时消失了(空格异常,因为网格最终空了一些如何......)

//misc using up here

namespace Mapper {
class Program {

static void Main(string[] args)
{ //TODO Parser

 int max_x=2;
 int max_y=2;

 Map myMap = new Map(max_x,max_y);
 myMap.print();


}

class Cell
{
 public char type='o';
 public Cell(char inittype){
 this.type=inittype;
 }

 public void printCell(){
 Console.Write(this.type); }

 public void set(char value){
 this.type = value; }
}

class Map
{
 private int max_X; //global
 private int max_Y; //global
 public Cell[,] grid; //global

 public Map(int maxX, int maxY) {
 Cell[,] grid = new Cell[maxX, MaxY];
 this.max_X = maxX; //Store constructor provided dimensions for global use
 this.max_Y = maxY; 
 for(int yv=0; yv &lt max_Y; yv++){
  for(int xv=0, xv &lt max_X;xv++){
    grid[xv,yx] = new Cell('x');
  }
 }

 public void print() {
 for(int yv=0; yv &lt max_Y; yv++){
  for(int xv=0, xv &lt max_X;xv++){
    grid[xv,yx].printCell();
  }
 }

}}
Run Code Online (Sandbox Code Playgroud)

运行跟踪一切看起来都很好,直到Map myMap行完成...换句话说,似乎构造函数没有"坚持",最后我得到一个空网格(它们都变为空.)我只能假设它是在某种程度上是一个范围问题......我错过了什么......?我把构造函数搞砸了吗?

Mar*_*ers 8

问题出在这里:

public Cell[,] grid; //global

public Map(int maxX, int maxY) {
    Cell[,] grid = new Cell[maxX, MaxY];
    ...
Run Code Online (Sandbox Code Playgroud)

您已经声明了一个名为grid的实例成员一个名为grid 的局部变量,但您只是更新了局部变量.

要解决此问题,请将上面提到的最后一行更改为:

grid = new Cell[maxX, maxY];
Run Code Online (Sandbox Code Playgroud)

您的代码中也存在大量编译错误 - 问题中的代码可能不是您正在运行的代码.下次请使用复制和粘贴将代码复制到问题中.

该评论//global也具有误导性.实例成员不是全局变量.与C#中的全局变量最接近的等价物是静态成员.