Struktur in foreach Schleife in C # aktualisieren

7

Ich habe diesen Code (C #):

%Vor%

Es wird nicht kompiliert.
Der Fehler ist:

%Vor%

Wenn ich Thing in ein class anstatt in ein struct ändere, kompiliert es jedoch.

Bitte kann jemand erklären, was vor sich geht?

    
AJ. 23.10.2009, 10:29
quelle

4 Antworten

9

Mehr oder weniger was es sagt, der Compiler wird nicht zulassen, dass Sie die Schleifenvariation in einem foreach ändern (Teile davon).

Verwenden Sie einfach:

%Vor%

Und es funktioniert, wenn Thing eine Klasse ist, denn dann ist Ihre Schleifenvariable eine Referenz, und Sie nehmen nur Änderungen am referenzierten Objekt vor, nicht an der Referenz selbst.

    
Henk Holterman 23.10.2009, 10:33
quelle
7

Eine Struktur ist kein Referenztyp, sondern ein Werttyp.

Wenn Sie eine class anstelle von struct für Thing hätten, würde die foreach-Schleife eine Referenzvariable für Sie erstellen, die auf das richtige Element in Ihrer Liste zeigen würde. Da es sich jedoch um einen Werttyp handelt, wird nur eine Kopie von Thing verwendet, in diesem Fall die Iterationsvariable.

    
Johannes Rudolph 23.10.2009 10:32
quelle
2

Eine Struktur ist ein Werttyp, aber eine Klasse ist ein Referenztyp. Deshalb kompiliert es, wenn Dies ist eine Klasse, aber nicht, wenn es eine Struktur ist

Siehe mehr: Ссылка

    
armannvg 23.10.2009 10:34
quelle
1

Eine alternative Syntax, die ich zu @ Henks Lösung bevorzuge, ist diese.

%Vor%

Wenn Sie eine vernünftige Menge an Arbeit in der Schleife machen, dann ist es für das Auge nicht einfacher, die Indizierung überall zu wiederholen.

P.S. DateTime ist eigentlich ein wirklich schlechtes Beispiel, da es keine Eigenschaften hat, die Sie festlegen können, aber Sie erhalten das Bild.

    
Neutrino 29.11.2017 15:53
quelle

Tags und Links