2013-07-11 176 views
0
 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()); 
     } 

我无法通过按键获取项目。有了这个代码它会抛出无法从OrderedDictionary检索值

索引超出范围。必须是非负的并且小于 的大小。

它将char'a'作为97作为整数值并试图通过索引获取值,但是这是什么原因?

如果我在我的循环中使用objectınstead它的作品。为什么?

 foreach (object Character in ordered.Keys) 
     { 

      MessageBox.Show(ordered[Character].ToString()); 

     }  

回答

1

OrderedDictionary具有用于它的索引两个重载:一个采取int索引和接受一个object另一个。

C#试图您转换char类型,以适应这些重载之一,它是选择之一,是char转换为int(因为编译器看到,作为“容易”做),从而使得假设你正在通过索引访问它。解决方法是明确的:

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

谢谢布拉德,哇真的很有帮助 – UfukSURMEN