Modifier le contenu dans foreach
Question
J'ai tendance à utiliser ArrayLists des structures. Il est alors très facile à faire défiler la liste avec un foreach.
Le problème que j'ai est je ne peux pas utiliser un foreach pour modifier les structures et le contenu doivent utiliser un et typecasts en désordre.
((dataStructure)files[x]).name = here;
Y at-il une façon plus ordonnée de le faire?
La solution
Je sais que cela semble simpliste, mais dire non à des types de valeur mutables .
Ils sont presque jamais la bonne solution au problème. Il y a très quelques exceptions près, mais les classes sont presque toujours le chemin à parcourir.
En plus, si vous utilisez vraiment un ArrayList
alors vous serez encourir un coût unboxing déjà ... (Comme le dit Konrad, si vous pouvez utiliser .NET 2.0 puis utilisez génériques.)
Si vous insistez sur l'utilisation de structures mutables, puis utilisez une boucle au lieu de for
foreach
. Mais s'il vous plaît, s'il vous plaît changer les classes de toute façon.
Autres conseils
Oui, il y a: ne pas utiliser typées ArrayList
, ces types sont déconseillés en faveur des types génériques dans System.Collections.Generic
. Dans votre cas. List<T>
Vous ne pouvez toujours pas l'utiliser en conjonction avec une boucle pour modifier les valeurs foreach
de la structure, mais au moins vous ne devez pas jeter.
Utilisez la version générique de ArrayList
:. List<DataStructure>
De cette façon, les choses semblent beaucoup mieux:
files[x].name = here;
Oui, il y a des cas où n'est pas aussi List <T>
utile. Dans ces cas, le plus vieux truc dans les travaux manuels. Au lieu de foreach
, vous devez utiliser en boucle:
while (listItem.Count >0)
{
//do operation with 0th element of List Item always like
deletefunc(lisItem[0]);
}