Diskuze: Tak struct je reference nebo co?!
Zobrazeno 4 zpráv z 4.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Vsak se ten struct nechova jako reference.
Jako reference se ti chova ten List, protoze to je referencni typ, i kdyz ho
naplnis hodnotovyma typama.
A ve foreachi nemuzes tu kolekci upravovat, pokud ji chces upravovat pri prochazeni, tak musis normalnim cyklem nebo druha varianta je prochazet kopii a nebo si udelat pomocny pole, kam si ulozis prvky, co chces potom vymazat.
Osobne bych to cely prekopal rovnou na
Dictionary<string ulong>
Coz bude i o neco rychlejsi, protoze hledani hodnoty, jestli uz tam je, bude mit konstantni slozitost (hledani v hashmape), ted hledas v listu s linearni slozitosti.
Tohle ale nemá co dělat s tím, jak se chová primitivní nebo referenční
typ, tohle je jen o chování listu. Zdá se, že nějakým způsobem dojdeš k
situaci, kdy Hodnoty
a NoveHodnoty
jsou stejná
instance - tudíž v momentě, kdy uděláš Hodnoty.Remove()
nebo
Hodnoty.Add()
, změní se noveHodnoty
a spadne to na
té výjimce.
Jestli se tomu chceš jednoduše vyhnout, můžeš třeba do PridejHodnoty()
vždy dávat kopii (prostě zavoláš .ToArray()
).
Můžeš tedy spát pokojně dál, protože struct se skutečně jako reference nechová.
Díky za odpovědi, mám v tom teď trochu víc jasno.
Zobrazeno 4 zpráv z 4.