无法从OrderedDictionary检索值

时间:2013-07-11 12:52:33

标签: winforms collections

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

        }     

1 个答案:

答案 0 :(得分:1)

OrderedDictionary对其索引器有两个重载:一个采用int索引,另一个采用object

C#正在尝试将您char类型转换为适合其中一个重载,而它选择的是将char转换为int(因为编译器将其视为“更容易“做”,因此假设您通过索引访问它。解决方案是明确的:

ordered[(object)Character].ToString());