c# class 被重写,无法赋值
c# class being overridden and can not be assigned
我有这样的代码
[System.Serializable] public class class1 {
[System.Serializable] public class class2 {
public int var1, var2; public string var3;
public class2 () {}
public class2 (int v1, int v2, string v3) {
var1 = v1;
var2 = v2;
var3 = v3;
}
}
public class2[] list;
}
public class1 _class1;
public void Assign () {
_class1 = new class1 ();
_class1.list = new class1.class2[3];
for (int i = 0; i < 3; i ++) {
_class1.list[i] = new class1.class2((int)Random.Range (10,20), (int)Random.Range (100,200), ((int) Random.Range(50, 75)).ToString ());
}
}
这段代码我还连接了其他脚本,从这里读取值,但我得到的是
_class1.list[]里面的所有对象都被冻结了,我不能改变它们的值,我改变了它们的值,它们又被设置为0。
我用这样的代码复制
//inside class1
public static class1 copy (class1 tocopy) {
class1 copy = new class1 ();
copy.list = tocopy.list;
return copy;
}
public class1 copy () {
return class1.copy (this);
}
//inside class2
public static class2 copy (class2 tocopy) {
class2 copy = new class2 ();
copy.var1 = tocopy.var1;
copy.var2 = tocopy.var2;
copy.var3 = tocopy.var3;
return copy;
}
public class2 copy () {
return class2.copy (this);
}
即使这样做,我也会得到一个 class,它与 classX copy = new classX ();
当我尝试为其分配值时,它会立即重新分配生成副本时的值。
我这样做是因为当我不使用 copy () 时,它使列表的所有值都具有相同的最后一个值,我打算更改 1 的值,并且它应用于所有,他们有一个实例,一个克隆,我不知道怎么称呼,一个参考。
我不知道如何删除这个引用,现在我正在引用一个新对象,所以现在我没有引用那个 class,所以它更好,它不会将值分配给class 我复制了。但我遇到了无法分配的问题。
我该如何解决这个问题?
问题不是很清楚,但我认为问题是因为你只是做了一个浅拷贝,尝试改变class1.copy
来复制列表的每一项:
public static class1 copy (class1 tocopy) {
class1 copy = new class1 ();
copy.list = new class1.class2[tocopy.list.Length];
for(int i = 0; i < tocopy.list.Length; i++) {
copy.list[i] = tocopy.list[i].copy();
}
return copy;
}
我有这样的代码
[System.Serializable] public class class1 {
[System.Serializable] public class class2 {
public int var1, var2; public string var3;
public class2 () {}
public class2 (int v1, int v2, string v3) {
var1 = v1;
var2 = v2;
var3 = v3;
}
}
public class2[] list;
}
public class1 _class1;
public void Assign () {
_class1 = new class1 ();
_class1.list = new class1.class2[3];
for (int i = 0; i < 3; i ++) {
_class1.list[i] = new class1.class2((int)Random.Range (10,20), (int)Random.Range (100,200), ((int) Random.Range(50, 75)).ToString ());
}
}
这段代码我还连接了其他脚本,从这里读取值,但我得到的是
_class1.list[]里面的所有对象都被冻结了,我不能改变它们的值,我改变了它们的值,它们又被设置为0。
我用这样的代码复制
//inside class1
public static class1 copy (class1 tocopy) {
class1 copy = new class1 ();
copy.list = tocopy.list;
return copy;
}
public class1 copy () {
return class1.copy (this);
}
//inside class2
public static class2 copy (class2 tocopy) {
class2 copy = new class2 ();
copy.var1 = tocopy.var1;
copy.var2 = tocopy.var2;
copy.var3 = tocopy.var3;
return copy;
}
public class2 copy () {
return class2.copy (this);
}
即使这样做,我也会得到一个 class,它与 classX copy = new classX ();
当我尝试为其分配值时,它会立即重新分配生成副本时的值。
我这样做是因为当我不使用 copy () 时,它使列表的所有值都具有相同的最后一个值,我打算更改 1 的值,并且它应用于所有,他们有一个实例,一个克隆,我不知道怎么称呼,一个参考。
我不知道如何删除这个引用,现在我正在引用一个新对象,所以现在我没有引用那个 class,所以它更好,它不会将值分配给class 我复制了。但我遇到了无法分配的问题。
我该如何解决这个问题?
问题不是很清楚,但我认为问题是因为你只是做了一个浅拷贝,尝试改变class1.copy
来复制列表的每一项:
public static class1 copy (class1 tocopy) {
class1 copy = new class1 ();
copy.list = new class1.class2[tocopy.list.Length];
for(int i = 0; i < tocopy.list.Length; i++) {
copy.list[i] = tocopy.list[i].copy();
}
return copy;
}