Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Problema costrutto For Each
Forum - C# / VB.NET - Problema costrutto For Each

Avatar
Ale96 (Member)
Pro


Messaggi: 132
Iscritto: 06/04/2010

Segnala al moderatore
Postato alle 20:43
Domenica, 26/09/2010
Buongiorno a tutti, mentre programmavo ho scritto questo:
Codice sorgente - presumibilmente VB.NET

  1. For Each rect as rectangle in rectangles
  2.     rect = new rectangle(rect.x, rect.y -5, 300, 25)
  3. Next


(Rectangles è una lista di rettangoli)
Il compilatore non ha segnato nessun errore
visto che i rettangoli venivano poi disegnati sullo schermo mi sono accorto che non venivano ne spostati ne ridimensionati, in un certo senso ho risolto così:
Codice sorgente - presumibilmente VB.NET

  1. For index as integer = 0 to rectangles.count -1
  2.     rectangle(index) = new rectangle(rect.x, rect.y -5, 300, 25)
  3. Next


Questo funziona ma è meno elegante, e mi chiedevo se fosse possibile, usando For Each, cambiare le proprietà di un oggetto. O devo usare il secondo metodo?
Grazie a chiunque mi aiuti o almeno ci provi.


Qualunque bug sufficientemente avanzato è indistinguibile da una caratteristica del software.

Ci sono 10 tipi di persone al mondo: chi capisce il codice binario e chi no.

I veri utenti non usano mai la funzione “Help”.
(tutti anonimi)
PM
Avatar
TEX WILLER (Normal User)
Expert


Messaggi: 579
Iscritto: 07/07/2009

Up
2
Down
V
Segnala al moderatore
Postato alle 22:18
Domenica, 26/09/2010
Credo che con il for each non vada, quindi questo, poi non sò!


-guida installazione ubuntu su VirtualBox:
http://bloginform.altervista.org/?p=287
- Il nuovo blog sull'informatica: http://bloginform.altervista.org/
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
5
Down
V
Segnala al moderatore
Postato alle 18:00
Lunedì, 27/09/2010
E' come ha detto tex, solo che lui non ha la minima idea del perchè XD
Te lo dico io: durante l'enumerazione con il for each, viene invocata la proprietà Current dell'interfaccia IEnumerable, nella quale il codice potrebbe essere qualcosa di questo tipo:
Codice sorgente - presumibilmente C# / VB.NET

  1. Return elem(index)


Come sappiamo, però, Rectangle è una struttura, quindi non viene restituito l'indirizzo a cui si trova nella memoria ma direttamente il suo valore, perchè è un tipo value. Quindi la variabile temporanea rect contiene solo una copia del valore di rectangles(i) (per qualche i), con il risultato che assegnadogli un nuovo oggetto sovrascrivi una variabile temporanea che viene persa alla fine del ciclo.

Funziona, invece, con le variabili reference, ma solo se ne cambi le proprietà.


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM
Avatar
Ultimo (Member)
Expert


Messaggi: 531
Iscritto: 22/05/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 12:22
Martedì, 28/09/2010

Quoto il grande Totem :k:


Ultimo (Hai voluto la bicicletta ? ....)

Studiare LINQ, WPF, ASP.NET MVC, Entity Framwork, C#, Blend, XAML, Javascript, HTML5, CSS .....(tanta roba)

https://www.dropbox.com/s/c2aots5x4urgbhf/setup_game_sudoku ...
PM