Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - modifca insieme in ciclo for....each
Forum - C# / VB.NET - modifca insieme in ciclo for....each

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 14:46
Domenica, 31/05/2009
ciao ragazzuoli... ho bisogno di un aiutino... io ho un array di 2000 istanze... queste istanze si connettono e disconnettono quindi questa array è in continuo mutamento...
come posso fare in moo che eseguendo un ciclo for each questo non vada in errore perche l'insieme è stato modificato?

avevo visto qui... http://msdn.microsoft.com/it-it/library/5ebk1751(VS.80).aspx

ma non si capisce...

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 15:01
Domenica, 31/05/2009
Il for each non deve essere usato quando la collezione su cui itera subisce delle modifiche. Al suo posto, usa un Do Loop con contatore; oppure due for each, in cui nel primo memorizzi ciò che devi eliminare e nel secondo lo elimini.

PM Quote
Avatar
ruggy94 (Member)
Guru


Messaggi: 890
Iscritto: 21/04/2008

Segnala al moderatore
Postato alle 15:03
Domenica, 31/05/2009
Non è detto che vada in errore. Dipende da cosa modifichi. Il link che hai postato semplicemente descrive come è strutturato un ciclo for. Potresti postare un po' di codice o spiegare a parole cosa vai a modificare, etc.?
EDIT: Quando ho iniziato a postare io non c'era ancora la risposta di Totem :D

Ultima modifica effettuata da ruggy94 il 31/05/2009 alle 15:05
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 15:05
Domenica, 31/05/2009
Di solito lancia un'eccezione quando si aggiunge, si rimuove o si inserisce qualcosa.

PM Quote
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 15:14
Domenica, 31/05/2009
ma ho letto che potrei usare il ienumerable... anche se non ho idea di cosa sia.....

PM Quote
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 15:16
Domenica, 31/05/2009
cmq il do loop con contatore non andrebbe bene perche dovrei modificare migliaia di righe di codice.... sarà l'ultima speranza se è .... per quanto riguarda i 2 cicli for each... si puo vedere se l'array ad esempio è in uso quel momento e ritardare l'eliminazione di un elemento o l'aggiunta di qualche ms?

PM Quote
Avatar
Jeremy (Normal User)
Pro


Messaggi: 134
Iscritto: 08/02/2009

Segnala al moderatore
Postato alle 15:52
Domenica, 31/05/2009
Postato originariamente da GoLDBeRG:
Testo quotato


ma ho letto che potrei usare il ienumerable... anche se non ho idea di cosa sia.....



Vuol dire che potresti fare uso di Linq To Object per valutare quello che stai valutando al momento con il ciclo For....Each.
Dovresti mostrare però un pò di codice per farci capire bene le tue intenzioni.

Facci sapere..
Ciao

Ultima modifica effettuata da Jeremy il 31/05/2009 alle 15:53
PM Quote
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 16:33
Domenica, 31/05/2009
ho un array di nome users (shared)

questo array è in continuo mutamento tra eliminazione e aggiunta di user.

ho bisogno di inviare un messaggio a tutti e 5000 gli utenti ma mentre il ciclo invia i messaggi a tutti entra un utente modifica l'array e il ciclo va a all'aceto..... cosa posso fare? non mi dite usa una var boolean perche ho centinaia di cicli... ci sarà pur qualcosa che mi permette di sapere se l'array è sotto ciclo o no?

PM Quote
Avatar
Jeremy (Normal User)
Pro


Messaggi: 134
Iscritto: 08/02/2009

Segnala al moderatore
Postato alle 17:09
Domenica, 31/05/2009
Testo quotato

Postato originariamente da GoLDBeRG:

ho un array di nome users (shared)

questo array è in continuo mutamento tra eliminazione e aggiunta di user.

ho bisogno di inviare un messaggio a tutti e 5000 gli utenti ma mentre il ciclo invia i messaggi a tutti entra un utente modifica l'array e il ciclo va a all'aceto..... cosa posso fare? non mi dite usa una var boolean perche ho centinaia di cicli... ci sarà pur qualcosa che mi permette di sapere se l'array è sotto ciclo o no?



Ciao.
Non ti serve sapere se è sotto ciclo o no
Come hai letto, puoi sfruttare Linq e produrre una cosa del genere
Codice sorgente - presumibilmente VB.NET

  1. Supponiamo che tu abbia un array di 5000 elementi
  2.     Dim Users(4999) As String
  3.  
  4.  
  5.     Private Sub CiclaArray()
  6.         Dim myUsers = From _Users In Users Select _Users
  7.         For Each User In myUsers
  8.             MessageBox.Show(User)
  9.         Next
  10.     End Sub



In questo modo, essendo Users un array di String, per inferenza del tipo myUsers diventerà un IEnumerable(of String) completamente disconnesso dall'origine(Users) e quindi non soggetto a cambiamenti durante il ciclo.

Facci sapere...
Ciao

Ultima modifica effettuata da Jeremy il 01/06/2009 alle 15:47
PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo