2010-06-19 109 views
0

.NET 2修改字典值

標準:

foreach(KeyValuePair<int,int> entry in MyDic) 
    { 
     entry.Value += i; // does not work :(
     i++; 
    } 

建議?

+0

「i」定義在哪裏 – 2010-06-19 00:55:14

回答

4

改爲在Keys屬性上循環。當您使用枚舉數時,對枚舉數的任何修改都會使枚舉數在下一次調用MoveNext時失效。

您可以枚舉KeysAllKeys(它只是一個字符串數組)並修改它們指向的值非常安全。

此外,KeyValuePair<K, V>的屬性本身是隻讀的,所以,迭代器是否阻止,沒有任何情況下您可以修改這些值而不濫用反射。

+0

serhio:你無法修改字典的原因是你也修改了列舉的值。以快速使用按鍵Joe Smith建議您可以修改這些值 - 但不要嘗試在您的foreach循環中以這種方式添加/刪除按鍵。 – 2010-06-19 01:09:31

+0

感謝您強調這一點。值得一提的是,.NET中的大多數集合類都是由多個獨立集合組成的。 – 2010-06-19 01:43:17

+0

我需要注意條目的順序。假設我添加了鍵1,10,3,5,我需要按照相同的順序對其進行修改:1,10,3,5。這個順序是否會受到尊重? – serhio 2010-06-21 08:01:20