Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要在C中使用类的noob帮助吗#_C#_Arrays_Class - Fatal编程技术网

C# 需要在C中使用类的noob帮助吗#

C# 需要在C中使用类的noob帮助吗#,c#,arrays,class,C#,Arrays,Class,我正在开发一个程序,它将一个数字(int)馈送到一个2D数组 这一部分很简单,但我的教授补充说,程序应该能够通过字符串(通常是字母)确定数字的添加位置 通常,我只是简单地将int 2D数组转换为字符串1,将字符串连接到数字,然后说任务完成了 但是教授给了我们一个“糟糕”的时刻,他提到这必须通过课堂来完成 我对类不是很了解,我只使用它们通过get/set方法将一个变量以一种形式传递给另一种形式 基本上,教授希望数组在同一索引中同时包含int和string,如下所示: 班级: class Class

我正在开发一个程序,它将一个数字(int)馈送到一个2D数组

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

通常,我只是简单地将int 2D数组转换为字符串1,将字符串连接到数字,然后说任务完成了

但是教授给了我们一个“糟糕”的时刻,他提到这必须通过课堂来完成

我对类不是很了解,我只使用它们通过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";
    }
  }
}
publicfrmsgame()
{
初始化组件();
}
ClassName[,]myArray=新类名[9,8];
公共frmMain_加载(对象发送方,事件参数e)
{
clearArray();
}
公共无效clearArray()
{            
对于(int y=0;y<8;i++)
{
对于(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()函数中没有任何作用,因为我需要在多个函数中修改数组,所以我非常确定,将它放在每个函数中都会导致灾难性的结果


在这方面我可以得到一些帮助/建议吗?

声明
ClassName[,]myArray=newclassname[9,8]生成一个包含72个对象的空格的数组,但它不生成72个对象。数组一开始是空的

在尝试对数组中的对象执行任何操作(例如访问
num
loc
)之前,您需要实际创建它们。您可以在内部循环中执行此操作:

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;j++)
{
myArray[x,y]=新类名();
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();
for(int x=0;x<9;x++)
对于(int y=0;y<8;y++)
myArray[x,y]=新类名();

或者,在设置每个参数之前,只需将该语句放在现有循环中即可。

该类可能更容易:

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

Oops可能重复。对,我和j的事很抱歉。我通常用这个,但我决定用x和y,x和y轴。谢谢你的回答。我是否需要为处理此数组的每个函数重复“myArray[x,y]=new ClassName();”?或者只要我先调用“clearArray()”函数,它就会保持多久?请参阅,稍后,将对数组中的数字和字符串进行更多的添加和修改。后者。您应该创建一次对象;我会像你做的那样,编写一个函数
clearArray
,创建它们并为它们设置默认值,然后在程序开始时调用该函数。然后,只要您需要,它们就会一直在阵列中。
myArray[0, 4].num = 19
myArray[0, 4].loc = "NewLocation";