2013-07-11 2 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 в моей петле, это работает. Зачем?

 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

Смежные вопросы