2013-07-11 142 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