2010-12-08 41 views
3

如何修改Dictionary中的值?我要重新分配一個值,在我的字典中的值,而在我的字典裏循環是這樣的:如何在循環過程中更改字典的值

for (int i = 0; i < dtParams.Count; i++) 
{ 
    dtParams.Values.ElementAt(i).Replace("'", "''"); 
} 

其中dtParams是我Dictionary

我想要做一些事情是這樣的:

string a = "car";  
a = a.Replace("r","t"); 
+0

的可能重複的[如何通過詞典迭代和改變值?](http://stackoverflow.com/questions/2260446/how-to-iterate-through-dictionary-and-change-values) – SwDevMan81 2010-12-08 14:23:49

+0

他們是相似的,但不一樣,,,如何迭代通過詞典和更改值的解決方案?無法與我一起工作 – 2010-12-08 14:53:42

回答

8

字符串Replace函數返回一個新的修改過的字符串,因此您必須執行下列操作:

foreach (var key in dtParams.Keys.ToArray()) 
{ 
    dtParams[key] = dtParams[key].Replace("'", "''"); 
} 

編輯:

解決的集合被修改的問題(這是我沒有想到的,如果你訪問一個已經存在的鍵會出現...)

+0

異常:: 收藏已修改;枚舉操作可能不會執行。 – 2010-12-08 14:17:40

+1

嘗試使用for循環或創建一個新的Dictionary並添加到它而不是刪除。您不能在foreach循環中修改集合的成員。 – Pabuc 2010-12-08 14:18:56

3

當您使用替換,它會返回一個新的字符串實例,你需要在替換字符串之後賦值字典中的值是不可變的

3

你不能直接這樣做;在枚舉時不能修改集合(另外,這裏應避免使用ElementAt;這是一種LINQ to Objects擴展方法,並且對遍歷整個列表效率不高)。您必須複製鑰匙並重復以上步驟:

foreach(var key in dtParams.Keys.ToList()) // Calling ToList duplicates the list 
{ 
    dtParams[key] = dtParams[key].Replace("'", "''"); 
} 
1

有點拉姆達會走很長的路。 ;)

我把它放入LINQPad併爲你測試了。所有的集合都有.to [xxx]方法,所以你可以很容易地在1行內完成這一操作。

var dtParams = new Dictionary<string, string>(); 
dtParams.Add("1", "'"); 
dtParams.Add("a", "a"); 
dtParams.Add("b", "b"); 
dtParams.Add("2", "'"); 
dtParams.Add("c", "c"); 
dtParams.Add("d", "d"); 
dtParams.Add("e", "e"); 
dtParams.Add("3", "'"); 

var stuff = dtParams.ToDictionary(o => o.Key, o => o.Value.Replace("'", "''")); 
stuff.Dump();