J'utilise généralement une boucle foreach pour parcourir le dictionnaire.
Dictionary<string, string> dictSummary = new Dictionary<string, string>();
Dans ce cas, je veux couper les entrées d'espace blanc et la boucle foreach ne le permet cependant pas.
foreach (var kvp in dictSummary)
{
kvp.Value = kvp.Value.Trim();
}
Comment puis-je faire cela avec une boucle for?
for (int i = dictSummary.Count - 1; i >= 0; i--)
{
}
KeyValuePair<TKey, TValue>
ne vous permet pas de définir le Value
, il est immuable.
Vous devrez le faire comme ceci:
foreach(var kvp in dictSummary.ToArray())
dictSummary[kvp.Key] = kvp.Value.Trim();
La partie importante ici est le ToArray
. Cela copiera le dictionnaire dans un tableau, donc changer le dictionnaire à l'intérieur de foreach ne lancera pas un InvalidOperationException
.
Une approche alternative utiliserait la méthode ToDictionary
de LINQ:
dictSummary = dictSummary.ToDictionary(x => x.Key, x => x.Value.Trim());
et ça?
for (int i = dictSummary.Count - 1; i >= 0; i--) {
var item = dictSummary.ElementAt(i);
var itemKey = item.Key;
var itemValue = item.Value;
}
Vous n'avez pas besoin d'utiliser .ToArray()
ou .ElementAt()
. C'est aussi simple que d'accéder au dictionnaire avec la clé:
dictSummary.Keys.ToList().ForEach(k => dictSummary[k] = dictSummary[k].Trim());