Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有办法在迭代过程中编辑字典的值?_C#_Linq_Dictionary_Foreach_Iterator - Fatal编程技术网

C# 有没有办法在迭代过程中编辑字典的值?

C# 有没有办法在迭代过程中编辑字典的值?,c#,linq,dictionary,foreach,iterator,C#,Linq,Dictionary,Foreach,Iterator,我想更改C字典中满足特定标准的所有值 只需像这样编辑值 foreach (var kv in dictionary) { kv.Value += 1; } 不工作,因为foreach循环的KeyValuePair是只读的 但是,直接按如下方式编辑条目: foreach (var kv in dictionary) { dictionary[kv.Key] = kv.Value + 1; } foreach (string key in dictionary.Keys.ToArra

我想更改C字典中满足特定标准的所有值

只需像这样编辑值

foreach (var kv in dictionary)
{
   kv.Value += 1;
}
不工作,因为foreach循环的KeyValuePair是只读的

但是,直接按如下方式编辑条目:

foreach (var kv in dictionary)
{
   dictionary[kv.Key] = kv.Value + 1;
}
foreach (string key in dictionary.Keys.ToArray())
{
    dictionary[key] += 1;
}
也不起作用,因为它修改集合并中断迭代器

在这一点上,我能想到的唯一剩下的解决方案是将字典的所有键存储在一个列表中,然后在第二个循环中使用它来编辑值,然而,这对我来说似乎是一个非常不雅观的解决方案

有更好的选择吗?

您可以使用创建新字典并更改循环中的原点,如:

foreach (var kv in dictionary.ToDictionary(k=>k.Key,v=>v.Value))
{
   dictionary[kv.Key] = kv.Value + 1;
}

我希望这对您有所帮助。

您可以使用foreach中的.key创建一个数组或一个带有.ToList的列表,如下所示:

foreach (var kv in dictionary)
{
   dictionary[kv.Key] = kv.Value + 1;
}
foreach (string key in dictionary.Keys.ToArray())
{
    dictionary[key] += 1;
}

NBA是一种自行车比赛。你想要一个标准。你考虑过改用ConcurrentDictionary吗?对不起,非母语人士。德语单词是Kriterium。在VB.NET中,可以使用x=x.SelectOf dictionaryentryfunction de New DictionaryEntry和{.Key=de.Key、.Value=de.Value+1}.ToDictionaryOf String、integerfunction k.Key.ToString、Functionv CIntv.Value-到C的翻译避开我。相关:或,.ToList。我本以为这本字典。Keys会在运行中编造一个集合,但我猜它只是通过收益率回报或类似的方式实现了一个IEnumerable。对,或者ToList,我把它包括在我的答案中,谢谢@Flydog57!正当我以前确实想过,但我是个傻瓜,忘了包括System.Linq,所以我认为字典没有这个选项。我测试了它,是的,否则会抛出关于修改集合的异常。我是个大傻瓜。我确实想到了,但似乎不起作用。真正的问题是,出于某种原因,我忘了包括System.Linq。