Sie sollten das Wörterbuch nicht ändern, während Sie es wiederholen, da sonst eine Ausnahme auftritt.
Kopieren Sie also zuerst die Schlüssel-Wert-Paare in eine temporäre Liste, durchlaufen Sie diese temporäre Liste und ändern Sie dann Ihr Wörterbuch:
Dictionary<string, double> myDict = new Dictionary<string, double>();
myDict["a"] = 2.200001;
myDict["b"] = 77777.3333;
myDict["c"] = 2.3459999999;
List<KeyValuePair<string, double>> list = new List<KeyValuePair<string, double>>(myDict);
foreach (KeyValuePair<string, double> kvp in list)
{
myDict[kvp.Key] = Math.Round(kvp.Value, 3);
}
foreach (var pair in myDict)
{
Console.WriteLine(pair.Key + " = " + pair.Value);
}
Ausgabe (auf meinem Computer):
a = 2,2
b = 77777,333
c = 2,346
Hinweis : In Bezug auf die Leistung ist diese Lösung etwas besser als derzeit veröffentlichte Lösungen, da der Wert bereits mit dem Schlüssel zugewiesen wurde und nicht erneut aus dem Wörterbuchobjekt abgerufen werden muss.
class Box<T> { public T boxed; }
Und dann ein verwenden,Dictionary<string, Box<double>>
das Sie dann verwenden können "modifizieren" im foreach so etwas wie :kvp.Value.boxed = 123.456;
. Nicht zu sagen, dass es der "beste" Ansatz ist, aber es hat seinen Anteil an Verwendungen.