c#中使用类的新手需要帮助

本文关键字:新手 帮助 | 更新日期: 2023-09-27 18:11:15

我正在编写一个程序,将一个数字(int)输入到一个2D数组。

这部分很简单,但我的教授补充说,程序应该能够通过字符串(通常是一个字母)确定数字是从哪里添加的。

通常情况下,我只是将int 2D数组转换为字符串数组,将字符串连接到数字,然后说任务完成了。

但是当教授提到必须用课堂来完成时,他让我们大吃一惊。

我对类不是很了解,我只使用过它们通过get/set方法将一个变量以一种形式传递给另一种形式。

基本上,教授想要的是数组在同一个索引中同时包含int和string类型,就像这样:

类:

class ClassName
{
  public int num;
  public string loc;
}

主程序:

public frmSGame()
{
  InitializeComponent();
}
ClassName[,] myArray = new ClassName[9,8];
public frmMain_Load(object sender, EventArgs e)
{
  clearArray();
}
public void clearArray()
{            
  for (int y = 0; y < 8; i++)
  {
    for (int x = 0; x < 9; j++)
    {
      myArray[x, y].num = -1;
      myArray[x, y].loc = "A";
    }
  }
}

这就是我的问题。在clearArray()函数的for int循环中,运行程序会给我一个"NullReferenceException未处理-对象引用未设置为对象的实例"。

我真的不知道我做错了什么。将"ClassName[,] myArray = new ClassName[9,8]"放在clearArray()函数中没有任何作用,而且由于我需要在多个函数中修改数组,我很确定将其放在每个函数中会导致灾难性的结果。 在这方面我可以得到一些帮助/建议吗?

c#中使用类的新手需要帮助

声明ClassName[,] myArray = new ClassName[9,8];为72个对象创建一个包含空格的数组,但它没有创建72个对象。

在您尝试对数组中的对象做任何事情之前(例如访问numloc),您需要实际创建它们。你可以在你的内循环中这样做:

for (int x = 0; x < 9; j++)
{
  myArray[x, y] = new ClassName();
  myArray[x, y].num = -1;
  myArray[x, y].loc = "A";
}

由于数组的每个元素都是对象,因此必须实例化每个元素:

for(int x = 0; x < 9; x++)
   for(int y = 0; y < 8; y++)
      myArray[x, y] = new ClassName();

或者,在设置每个参数之前,您可以简单地将该语句放入现有循环中。

这个类对您来说可能更简单一些:

class ClassName
{
  public int num;
  public string loc;
  public ClassName(int n, string s){
    num = n;
    loc = s;
  }
}
public void clearArray(){
  for(int x = 0; x < 9; x++)
     for(int y = 0; y < 8; y++)
        myArray[x, y] = new ClassName(-1, "A");
}

你可以这样访问这些属性:

myArray[0, 4].num = 19
myArray[0, 4].loc = "NewLocation";