I made a Dictionary<string, string>
collection so that I can quickly reference the items by their string identifier.
But I now also need to access this collective by index counter (foreach won't work in my real example).
What do I have to do to the collection below so that I can access its items via integer index as well?
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");
开发者_如何学Python 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);
}
}
}
You can't. And your question infers your belief that Dictionary<TKey, TValue>
is an ordered list. It is not. If you need an ordered dictionary, this type isn't for you.
Perhaps OrderedDictionary is your friend. It provides integer indexing.
You can not. As was said - a dictionary has no order.
Make your OWN CONTAINER that exposes IList
and IDictionary
... and internally manages both (list and dictionary). This is what I do in those cases. So, I can use both methods.
Basically
class MyOwnContainer : IList, IDictionary
and then internally
IList _list = xxx
IDictionary _dictionary = xxx
then in add / remove / change... update both.
You can use the KeyedCollection<TKey, TItem>
class in the System.Collections.ObjectModel
namespace for this. There's only one gotcha: it is abstract. So you will have to inherit from it and create your own :-). Otherwise use the non-generic OrderedDictionary
class.
You can't: an index is meaningless because a dictionary is not ordered - and the order in which items are returned when enumerating can change as you add and remove items. You need to copy the items to a list to do that.
Dictionary
is not sorted/ordered, so index numbers would be meaningless.
精彩评论