как изменить значение словаря во время цикла - PullRequest
3 голосов
/ 08 декабря 2010

Как мне изменить значение в словаре?Я хочу переназначить значение на значение в моем словаре, зацикливаясь на моем словаре следующим образом:

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

, где dtParams - это мой Dictionary

Я хочу кое-что сделатькак это:

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

Ответы [ 4 ]

8 голосов
/ 08 декабря 2010

Функция замены строки возвращает новую измененную строку, поэтому вам нужно сделать что-то вроде:

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

EDIT:

Устранена проблема, связанная с изменением коллекции (я не думал, что она возникнет, если вы получите доступ к ключу, который уже существует ...)

3 голосов
/ 08 декабря 2010

Вы не можете сделать это напрямую;вы не можете изменять коллекцию во время ее перечисления (также избегайте использования ElementAt здесь; это метод расширения LINQ to Objects и он неэффективен для перебора всего списка).Вам нужно будет сделать копию ключей и повторить это:

foreach(var key in dtParams.Keys.ToList()) // Calling ToList duplicates the list
{
    dtParams[key] = dtParams[key].Replace("'", "''");
}
3 голосов
/ 08 декабря 2010

когда вы используете замену, он вернет новый экземпляр строки, вам нужно присвоить значение в словаре после замены, потому что строка неизменна по своей природе

1 голос
/ 08 декабря 2010

Маленькая лямбда пройдет долгий путь. ;)

Я поместил это в 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...