OrderedDictionary ordered = new OrderedDictionary();
ordered.Add('a', "something");
ordered.Add('b', "someone");
ordered.Add('c', "somewhere");
foreach (char Character in ordered.Keys)
{
MessageBox.Show(ordered[Character].ToString());
}
我无法通过他们的钥匙获得物品。使用此代码,它会抛出
指数超出范围。必须是非负数且小于 集合。
它将char'a'作为整数值的97并尝试通过索引获取值,但这是什么原因?
如果我在循环中使用object
,那么它可以工作。为什么呢?
foreach (object Character in ordered.Keys)
{
MessageBox.Show(ordered[Character].ToString());
}
答案 0 :(得分:1)
OrderedDictionary对其索引器有两个重载:一个采用int
索引,另一个采用object
。
C#正在尝试将您char
类型转换为适合其中一个重载,而它选择的是将char
转换为int
(因为编译器将其视为“更容易“做”,因此假设您通过索引访问它。解决方案是明确的:
ordered[(object)Character].ToString());