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);
}