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

我无法通过他们的钥匙获得物品。使用此代码,它会抛出

指数超出范围。必须是非负数且小于集合的大小。

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

如果我object在我的循环中使用它,它会起作用。为什么?

      foreach (object Character in ordered.Keys)
        {

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

        }     
4

1 回答 1

1

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

C# 正在尝试将您char的类型转换为适合这些重载之一,并且它选择的重载是转换charint(因为编译器认为这样做“更容易”),因此假设您正在通过索引访问它。解决方案是明确的:

ordered[(object)Character].ToString());
于 2013-07-11T13:12:12.837 回答