2016-06-23 6 views
0

-Code geändert werden In Konstruktor dieser Klasse habe ich einige Tasten auf der Liste Kontrollen. Die Bevölkerung hatte ein paar Zeilen wie dieseStruct der Variable kann nicht

controls.Add(new Key() { key = jump, name = "jump", time = 0 }); 

Alles sieht gut aus, wenn ich die Überprüfung/Aufnahme/immer die Variable, aber nachdem ich es initialy gesetzt (in Konstruktor der Klasse), kann ich nicht ändern Sie es. Warum passiert das und gibt es einen Workaround?

+2

Es gibt keinen Grund in Ihrem geposteten Code, eine Struktur zu verwenden, Sie sollten es stattdessen zu einer Klasse machen –

+0

Ich sehe jetzt. Ich wusste nicht, dass du nicht nur eine Variable von struct ändern kannst. Danke – Monset

+0

Ich habe buchstäblich nur "struct" in "class" geändert, und jetzt funktioniert es. Jetzt sehe ich, das ist ein Duplikat – Monset

Antwort

1

Dies ist ein bekannter Nachteil von veränderlichen Strukturen. Wenn Sie eine Strukturvariable "zuweisen", erhalten Sie eine Kopie der Struktur, so wenn Sie controls[i].time = totalTime tun, wird die Kopie von controls[i] zurückgegeben wird verworfen. Sie würden

if (Input.Clicked(controls[i].key)) 
{ 
    var temp = controls[i]; // create a copy 
    temp.time = totalTime; // mutate the copy 
    controls[i] = temp;  // replace the original with the copy 
} 

Die einfachste fix zu tun haben, ist es ein class zu machen, da eine Klasse ein Referenz Typ ist die Variable ist eine Referenz auf die Daten und keine kopieren von die Daten.

+0

Eine einfache und leicht verständliche Antwort. +1 – Monset