C # Verweis auf Schleifenvariable

7

Ist es in C # möglich, so etwas wie das Folgende zu erhalten?

%Vor%

so dass var-Variable als Referenz behandelt wurde und das Zuweisen zu var würde ein Array-Element ändern?

    
Dasha Salo 03.07.2009, 07:05
quelle

5 Antworten

22

Es gibt kein solches Konstrukt für die Aktualisierung einer Schleife. Ein Iterator ist schreibgeschützt. Zum Beispiel bietet das Folgende einen perfekt gültigen Iterator:

%Vor%

Wie würde es aktualisiert? Was würde es aktualisieren?

Wenn die Daten ein Array / eine Liste / etc sind, dann etwas wie:

%Vor%

Oder andere Optionen je nach dem spezifischen Container.

Aktualisierung; Bei einem Push gibt es eine Erweiterungsmethode:

%Vor%     
Marc Gravell 03.07.2009, 07:06
quelle
2

Nein. Die foreach -Anweisung ist einfach Syntax Zucker oben auf der IEnumerable Schnittstelle. Diese Schnittstelle definiert eine Methode, um en IEnumerator zu erhalten, die ihrerseits über Methoden verfügt schreibgeschützte Aufzählung machen:

  • Aktuell: Objekt
  • MoveNext (): bool
  • Zurücksetzen (): void
Jørn Schou-Rode 03.07.2009 07:08
quelle
2
%Vor%

ist Compiler-Verknüpfung für:

%Vor%

Da IEnumerator.Current eine Get-Only-Eigenschaft ist, können Sie den Wert nicht festlegen.

%Vor%

Wenn Sie einen aktualisierbaren Enumerator unterstützen möchten, müssen Sie ihn selbst erstellen. Sie können jedoch nicht "foreach" verwenden und Sie müssen Wrapper für alle gängigen IEnumerable-Klassen implementieren.

Sie müssen Ihre aktuelle Situation analysieren und herausfinden, wie Sie aktualisieren können. Wenn Sie eine IList-Schnittstelle verwenden, können Sie Folgendes tun:

%Vor%     
Talljoe 03.07.2009 07:22
quelle
1
  

Im Falle einer Zeichenkette, nein; C #   Strings sind unveränderlich (kann nicht sein   geändert). Wenn du überzählst   Objekte eines anderen, veränderlichen Typs,   Sie können die Eigenschaften dieser ändern   Objekte.

Nur um zu zeigen, worüber Jacob spricht. Betrachten Sie das folgende Code-Snippet:

%Vor%

Wenn Sie versuchen, dem "obj" wie oben beschrieben zuzuordnen, erhalten Sie einen Kompilierzeitfehler. Aber nichts hindert Sie daran, die MyInt-Eigenschaften über die Referenz "obj" zu ändern     

Lurkeroid 03.07.2009 16:01
quelle
0

Im Falle einer Zeichenkette, nein; C # -Strings sind unveränderbar (kann nicht geändert werden). Wenn Sie Objekte eines anderen veränderbaren Typs aufzählen, können Sie die Eigenschaften dieser Objekte ändern.

    
Jacob 03.07.2009 07:08
quelle

Tags und Links