c#类被重写并且不能被赋值

本文关键字:不能 赋值 重写 | 更新日期: 2024-05-15 23:30:54

我有一个类似的代码

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

即使这样做,我也得到了一个与该classX链接的类copy=new classX();

当我尝试将值分配给它时,它会立即重新分配生成副本时的值。

我这样做是因为当我不使用copy()时,它使列表中的所有值都具有相同的最后一个值,我将更改值1,它应用于所有值,它们有一个实例,一个克隆,我不知道如何调用,一个引用。

我不知道如何删除这个引用,因为现在我正在引用一个新对象,所以现在我没有引用那个类,所以更好的是,它不会将值分配给我复制的类。但我遇到了一个问题,我不能分配这个。

我该怎么解决这个问题?

c#类被重写并且不能被赋值

问题不是很清楚,但我认为问题是因为你只做了一个浅层复制,请尝试更改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;
}