Liste des<T>.ForEach()' et la mutabilité
-
15-11-2019 - |
Question
Je veux traduire tous les points dans un List<T>
.Ceci fonctionne:
for (int i = 0; i <PolygonBase.Count; ++i)
{
PolygonBase[i] = PolygonBase[i] + MousePos;
}
Mais à l'aide de List<T>.ForEach
ne pas:
PolygonBase.ForEach(v => v += MousePos);
Des idées?
La solution
Votre code actuel est tout simplement ré-affectation de la variable locale v
une nouvelle valeur, - il ne pas se référer à la valeur d'origine dans la liste.C'est l'équivalent de l'écriture:
foreach(int v in PolygonBase)
{
v += MousePos;
}
Pour écrire la valeur d'origine, l'utilisation ConvertAll
:
PolygonBase.ConvertAll(v => v += MousePos);
Autres conseils
ForEach n'est pas mutable, il ne change pas la structure de données en quelque sorte.Découvrez cette menace.À l'aide conditionnelle lambda états avec un foreach Action sur une liste
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow