Oppure

Loading
26/09/10 18:43
Ale96
Buongiorno a tutti, mentre programmavo ho scritto questo:
For Each rect as rectangle in rectangles
    rect = new rectangle(rect.x, rect.y -5, 300, 25)
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ì:
For index as integer = 0 to rectangles.count -1
    rectangle(index) = new rectangle(rect.x, rect.y -5, 300, 25)
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.
aaa
26/09/10 20:18
TEX WILLER
Credo che con il for each non vada, quindi questo, poi non sò!
aaa
27/09/10 16:00
Il Totem
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:
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à.
aaa
28/09/10 10:22
Ultimo

Quoto il grande Totem :k:
If ok Then GOTO Avanza else GOTO Inizia