我制作了一个词典<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);
}
}
}
答案 0 :(得分:15)
你做不到。而您的问题则表明您认为Dictionary<TKey, TValue>
是一个有序列表。它不是。如果您需要有序字典,则此类型不适合您。
也许OrderedDictionary是你的朋友。它提供整数索引。
答案 1 :(得分:5)
你做不到。如上所述 - 字典没有订单。
使您的自己的容器暴露IList
和IDictionary
...并在内部管理(列表和字典)。这就是我在这些情况下所做的。所以,我可以使用这两种方法。
基本上
class MyOwnContainer : IList, IDictionary
然后在内部
IList _list = xxx
IDictionary _dictionary = xxx
然后在添加/删除/更改...更新两者。
答案 2 :(得分:3)
您可以使用KeyedCollection<TKey, TItem>
命名空间中的System.Collections.ObjectModel
类来实现此目的。只有一个问题:它是抽象的。所以你必须继承它并创建你自己的:-)。否则使用非通用OrderedDictionary
类。
答案 3 :(得分:2)
你不能:索引没有意义,因为没有排序字典 - 枚举时返回项目的顺序可能会随着你添加和删除项目而改变。您需要将项目复制到列表中才能执行此操作。
答案 4 :(得分:2)
Dictionary
未排序/排序,因此索引号将毫无意义。