C# 如何修复KeyValuePair<;字符,int[]>;在foreach语句中?

C# 如何修复KeyValuePair<;字符,int[]>;在foreach语句中?,c#,C#,如何在foreach语句中使用KeyValuePair 错误是 无法将类型“char”转换为“System.Collections.Generic.KeyValuePair” foreach(occ\u counts\u.Keys之前的键值对字符输入) { characterEntry.Value[i]=characterEntry.Value[i-1]+(characterEntry.Key==current?1:0); } 要更改条目的值,需要按键检索条目 foreach (char ent

如何在
foreach
语句中使用KeyValuePair

错误是

无法将类型“char”转换为“System.Collections.Generic.KeyValuePair”

foreach(occ\u counts\u.Keys之前的键值对字符输入)
{
characterEntry.Value[i]=characterEntry.Value[i-1]+(characterEntry.Key==current?1:0);
}

要更改条目的值,需要按键检索条目

foreach (char entryKey in occ_counts_before.Keys) {
    occ_counts_before[entryKey] = new int[] { }; // I can't figure out what are you assinging here so i put a empty int array, but you can figure out this yourself
}

请注意,foreach

中的变化假设
实现
IDictionary
之前的
occ\u计数,
只是
字符
的集合,而不是
键值对
。另外,您的
foreach
的主体正在尝试更改
值,该值是只读的。要修复它,您需要迭代字典的键,并使用每个键访问相应的值:

foreach(char key in occ_counts_before.Keys)
{
  occ_counts_before[key][i] = occ_counts_before[key][i - 1] + (key == current ? 1 : 0);
}

您正在迭代
,因此在迭代器中收到的是
字符
而不是
键值对
。 只需从
foreach
中删除属性


如果改用
var
,您会看到这一点。当您尝试访问characterEntry时,它将清楚地显示它是
char
,而不是
KeyValuePair
。当您从迭代中删除
键时,您将看到它是一个
KeyValuePair
,允许您从
.Key
访问
char
int[]
from
.Value

不要使用
.Keys
什么是
当前的
i
来自何处?用户也在使用KeyValuePair的值部分。您的帖子忽略了这一点。若要将值分配到[entryKey]之前的occ_counts_,请在[entryKey]之前使用value属性occ_counts_。值为只读。您是否尝试过此操作?它表面上是正确的,但不能实现OP想要的。说得对。foreach的主体同时使用
,因此它们可能希望使用第一个或第二个选项。我会更新我的答案。哦,他们在赋值。我的错。
foreach(char key in occ_counts_before.Keys)
{
  occ_counts_before[key][i] = occ_counts_before[key][i - 1] + (key == current ? 1 : 0);
}