2015-02-14 3 views
-2

Я, имеющим код, как этого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, и оно было применено ко всем, они имел экземпляр, клон, я не знаю, как позвонить, ссылку.

Я не знаю, как удалить эту ссылку, теперь я ссылаюсь на новый объект, поэтому теперь я не ссылаюсь на этот класс, поэтому лучше, он не присваивает значения классу, который я копировал. но я понимаю, что я не могу это назначить.

Как я могу это исправить?

+1

Ваш код даже не компилируется. Что вы тогда просите? –

+0

Вы пробовали отлаживать его, чтобы увидеть, много ли ваш список содержит один и тот же объект? Если вы добавите уникальный идентификатор, такой как [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), чтобы вернуть эту строку, это сделает бит легче. –

+0

'[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

ответ

0

вопросы не очень понятно, но я думаю, что проблема в том, что вы делаете только неполную копию, попробуйте изменить 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; 
} 
+0

спасибо, но и попробовал это, но проблема в том, что [class1] .copy() .list [i] не может быть назначен, я пытаюсь назначить, и он мгновенно очищает значение и сбрасывает предыдущий – patrickBoardley

+0

Вы действительно вызываете 'Assign'? – Shago

+0

Я делаю, но это всего лишь шуточная версия полного кода коллина плюс код. я говорю, что нет перегрузок (что-то, что каждый кадр назначает 0), я пробовал все, но ничто не останавливает его, чтобы очистить значение, так как класс обычно устанавливается из его ссылки. Есть ли способ получить его ссылку? – patrickBoardley