Diskuze: Hláška " Enumerator is not valid because collections changed

C# .NET .NET (C# a Visual Basic) Hláška " Enumerator is not valid because collections changed American English version English version

Avatar
Wayne
Člen
Avatar
Wayne:

Ahoj, mohl by mi někdo poradit jak vyřešit problém, když mám Grid komponentu, kterou dynamicky plním, problém nastane když vytvořím událost na button, kde se prochází tato komponenta a tahám z ní data, a na základě výsledků dat chci dynamicky vytvořit další sloupec, který dynamicky přidám do gridu, skončí to ale chybou výše

 
Odpovědět 24. listopadu 18:06
Avatar
Lukas C#
Redaktor
Avatar
Odpovídá na Wayne
Lukas C#:

Postni sem kód. V něm se líp hledá chyba než ve slovním popisu programu.

 
Nahoru Odpovědět 24. listopadu 19:17
Avatar
Marian Benčat
Redaktor
Avatar
Marian Benčat:

Kód není potřeba. Todle je přeci jasné.

Používáš foreach. Foreach funguje díky tomu, že ta kolekce implementuje IEnumerable.. IEnumerable neříká naprosto nic o tom, jak jsou data uskladněna. může to být klidně stromová struktura,.. IEnumerable říká pouze to, že LZE projít všechna data.

Foreach si zezačátku poví o Enumerátor.. představ si to jako PRST který ti ukazuje na 1 prvek... na ten prst si Foreach vola "dej mi dalsi" a ten prst se NEKAM presune,... ale nevime kam. Proste na dalsi.

Vzhledem k tomu, ze NENI specifikováno, jak jsou data uskladněna, tak můžou být třeba uložena ve stromu (datova struktura) a tak by se ti asi nelibiblo, kdyby si byl treba v nejakym "listu" stromu a behm toho prochazeni ti nekdo smazal parenta ze? :-))

Z toho duvodu se u Foreache kontroluje jesti nedoslo ke zmene.. protooze by logicky mohlo dojit k naruseni prochazeni.

Proto nemuzes nijak menit kolekci, kterou prochazis foreachem. Proto je foreach pomalejsi nez prosty FOR - protoze v kazde iteraci kontroluje, jestli nedoslo ke zmene a pokud dosĺo, vyhoédi presne takovouto exception.

proto pouzij FOR a nebo nemen data.

Editováno 24. listopadu 23:49
 
Nahoru Odpovědět  +5 24. listopadu 23:48
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na Lukas C#
Marian Benčat:

zapomnel jsem hajlajt. Tendle system je tak debilni boze.

 
Nahoru Odpovědět  -3 25. listopadu 9:16
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.