如何通过整数索引?</string,>引用Dictionary <string,string =“”>中的项目

时间:2010-03-08 15:18:58

标签: c# dictionary indexing

我制作了一个词典<string, string> 集合,以便我可以通过字符串标识符快速引用这些项目。

但我现在还需要通过索引计数器 访问这个集合(foreach在我的实例中不起作用)。

我需要对下面的集合做些什么才能通过整数索引访问其项目?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TestDict92929
{
    class Program
    {
        static void Main(string[] args)
        {
            Dictionary<string, string> events = new Dictionary<string, string>();

            events.Add("first", "this is the first one");
            events.Add("second", "this is the second one");
            events.Add("third", "this is the third one");

            string description = events["second"];
            Console.WriteLine(description);

            string description = events[1]; //error
            Console.WriteLine(description);
        }
    }
}

5 个答案:

答案 0 :(得分:15)

你做不到。而您的问题则表明您认为Dictionary<TKey, TValue>是一个有序列表。它不是。如果您需要有序字典,则此类型不适合您。

也许OrderedDictionary是你的朋友。它提供整数索引。

答案 1 :(得分:5)

你做不到。如上所述 - 字典没有订单。

使您的自己的容器暴露IListIDictionary ...并在内部管理(列表和字典)。这就是我在这些情况下所做的。所以,我可以使用这两种方法。

基本上

class MyOwnContainer : IList, IDictionary

然后在内部

IList _list = xxx
IDictionary _dictionary = xxx

然后在添加/删除/更改...更新两者。

答案 2 :(得分:3)

您可以使用KeyedCollection<TKey, TItem>命名空间中的System.Collections.ObjectModel类来实现此目的。只有一个问题:它是抽象的。所以你必须继承它并创建你自己的:-)。否则使用非通用OrderedDictionary类。

答案 3 :(得分:2)

你不能:索引没有意义,因为没有排序字典 - 枚举时返回项目的顺序可能会随着你添加和删除项目而改变。您需要将项目复制到列表中才能执行此操作。

答案 4 :(得分:2)

Dictionary未排序/排序,因此索引号将毫无意义。