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