如何修改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 :(得分:8)
字符串Replace函数返回一个新的修改后的字符串,因此您必须执行以下操作:
foreach (var key in dtParams.Keys.ToArray())
{
dtParams[key] = dtParams[key].Replace("'", "''");
}
编辑:
解决了该集合被修改的问题(如果您访问已存在的密钥,我认为不会发生这种情况......)
答案 1 :(得分:3)
当你使用replace时,它将返回一个新的字符串实例,你需要在替换之后在字典中赋值,因为字符串在本质上是不可变的
答案 2 :(得分:3)
你不能直接这样做;你在枚举时不能修改集合(同样,避免在这里使用ElementAt
;这是一个LINQ to Objects扩展方法,并且迭代整个列表效率很低)。你必须复制密钥并对其进行迭代:
foreach(var key in dtParams.Keys.ToList()) // Calling ToList duplicates the list
{
dtParams[key] = dtParams[key].Replace("'", "''");
}
答案 3 :(得分:1)
一个小小的lambda会走很长的路。 ;)
我把它放到了LINQPad中并为你测试了它。所有的集合都有.To [xxx]方法,所以你可以很容易地在一行中完成这个。
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();