如何在循环过程中更改字典的值

发布于 2024-10-06 19:22:17 字数 285 浏览 0 评论 0原文

如何修改字典中的值?我想在循环字典时将值重新分配给字典中的值,如下所示:

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

其中 dtParams 是我的字典

我想做这样的事情:

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

How do I modify a value in Dictionary? I want to reassign a value to a value in my dictionary while looping on my dictionary like this:

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

where dtParams is my Dictionary

I want to do some thing like this:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

稳稳的幸福 2024-10-13 19:22:17

字符串替换函数返回一个新的修改后的字符串,因此您必须执行以下操作:

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

编辑:

解决了集合被修改的问题(我认为如果您访问已经存在的密钥,则不会发生这种情况......)

The string Replace function returns a new modified string, so you'd have to do something like:

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

EDIT:

Addressed the collection is modified issue (which I didn't think would occur if you access a key that already exists...)

蔚蓝源自深海 2024-10-13 19:22:17

你不能直接这样做;枚举集合时无法对其进行修改(另外,请避免在此处使用 ElementAt;这是 LINQ to Objects 扩展方法,对于迭代整个列表而言效率较低)。您必须复制密钥并对其进行迭代:

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

You can't do this directly; you cannot modify a collection while you're enumerating it (also, avoid using ElementAt here; this is a LINQ to Objects extension method and is inefficient for iterating over an entire list). You'll have to make a copy of the keys and iterate over that:

foreach(var key in dtParams.Keys.ToList()) // Calling ToList duplicates the list
{
    dtParams[key] = dtParams[key].Replace("'", "''");
}
我是有多爱你 2024-10-13 19:22:17

当你使用replace时,它会返回一个新的字符串实例,你需要在replace后分配字典中的值,因为字符串本质上是不可变的

when you use replace , it will return a new string instance , you need to assign the value in the dictionary after replace becaue string is immutable in nature

只为一人 2024-10-13 19:22:17

一点 lambda 会有很长的路要走。 ;)

我将其放入 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();

A little lambda will go a long way. ;)

I dropped this into LINQPad and tested it out for you. All the collections have .To[xxx] methods so you can do this quite easily in 1 line.

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();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文