我需要更改从GetCell方法获得的数组单元格对象。当我尝试更改收到的对象时,它不会更改原始对象。
这就是它在代码中的样子:
// this is in MyClass
A[,] arr = new A[100,500];
// this is in main class
MyClass GetAAt(Point p) { return myClass.arr[p.X,p.Y]; }
var a = GetAAt(new Point(23,45));
a = new A(); // this only changes the local `a` but not the arr[23,45]
我在这里做错了什么?
答案 0 :(得分:3)
您没有更改收到的对象 相反,您正在更改用于保存接收对象的变量,而不是保留一个全新的对象。
答案 1 :(得分:1)
您正在为变量a分配新实例。您可以向班级添加新方法
void SetAAt(Point p, A a)
{
arr[p.X,p.Y] = a;
}
并将其称为:
Point p = new Point(23,45);
var a = new A();
SetAAt(p, a);
P.S。您不应该为您的数组命名与类相同的名称。虽然有可能,但我认为这不是一个好习惯。
答案 2 :(得分:0)
a
和arr[23, 45]
都是引用类型(指针)
将a
设置为new A()
只会使其指向新对象。它实际上并没有改变它指向的对象。
您可能需要向MyClass
添加删除/重新初始化值的方法
尝试向MyClass
public void ResetAAt(int i, int j)
{
arr[i, j] = new A();
}