Я, имеющим код, как этогоC# класс переопределяется и не может быть назначен
[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 [] все объекты внутри этого заморожены, я не могу изменить их значение, я изменить thevalue и они получили выставиться снова 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);
}
Даже если это сделать, я получаю класс, связанный с этим классомX copy = new classX();
, и когда я пытаюсь присвоить значение этому, он мгновенно переназначает значение, которое он имел при создании копии.
Я делаю это, потому что, когда я не использовал copy(), он делал все значения списка с тем же последним значением, я собирался изменить значение 1, и оно было применено ко всем, они имел экземпляр, клон, я не знаю, как позвонить, ссылку.
Я не знаю, как удалить эту ссылку, теперь я ссылаюсь на новый объект, поэтому теперь я не ссылаюсь на этот класс, поэтому лучше, он не присваивает значения классу, который я копировал. но я понимаю, что я не могу это назначить.
Как я могу это исправить?
Ваш код даже не компилируется. Что вы тогда просите? –
Вы пробовали отлаживать его, чтобы увидеть, много ли ваш список содержит один и тот же объект? Если вы добавите уникальный идентификатор, такой как [GUID] (https://msdn.microsoft.com/en-us/library/system.guid) в каждый класс (например, добавьте строку string guid = new Guid(). ToString() ; 'как поле в каждом классе), то переопределите метод [ToString] (https://msdn.microsoft.com/en-us/library/system.object.tostring), чтобы вернуть эту строку, это сделает бит легче. –
'[System.Serializable] public class class1 { \t \t [Система.Serializable] public class class2 { \t \t \t public int var1, var2; public string var3; \t \t \t общественного class2() {} \t \t \t общественного class2 (интермедиат v1, v2 INT, строка v3) { \t \t \t \t var1 = v1; \t \t \t \t var2 = v2; \t \t \t \t var3 = v3; \t \t \t} \t \t} \t \t общественного class2 [] список; \t} \t общественный класс1 _class1; \t public void Assign() { \t \t _class1 = new class1(); \t \t _class1.list = new class1.class2 [3]; \t \t для (INT I = 0; I <3; я ++) { \t \t \t _class1.list [I] = новый class1.class2 ((INT) Random.Range (10,20), (промежуточное соединение) Random.Range (100,200), ((int) Random.Range (50, 75). ToString())); \t \t} \t} ' – patrickBoardley