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' を整数値として 97 として取り、インデックスで値を取得しようとしますが、この理由は何ですか?

object代わりにループで使用すると機能します。なんで?

      foreach (object Character in ordered.Keys)
        {

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

        }     
4

1 に答える 1

1

OrderedDictionaryには、そのインデクサー用の 2 つのオーバーロードがあります。1 つはintインデックスを受け取り、もう1 つはobject.

C# はchar、これらのオーバーロードの 1 つに適合するように型を変換しようとしています。選択している型は変換char先でintあり (コンパイラはそれを "簡単に" 実行できると見なすため)、インデックスによってアクセスしていると仮定します。解決策は明示することです:

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