24

如何通过索引从 OrderedDictionary 中获取项目的键和值?

4

3 回答 3

50
orderedDictionary.Cast<DictionaryEntry>().ElementAt(index);
于 2013-12-12T10:18:20.487 回答
8

没有直接的内置方法可以做到这一点。这是因为对于OrderedDictionary索引关键;如果您想要实际的密钥,那么您需要自己跟踪它。可能最直接的方法是将键复制到可索引集合中:

// dict is OrderedDictionary
object[] keys = new object[dict.Keys.Count];
dict.Keys.CopyTo(keys, 0);
for(int i = 0; i < dict.Keys.Count; i++) {
    Console.WriteLine(
        "Index = {0}, Key = {1}, Value = {2}",
        i,
        keys[i],
        dict[i]
    );
}

您可以将此行为封装到一个新类中,该类包含对OrderedDictionary.

于 2010-02-09T15:07:20.360 回答
2

我使用前面提到的代码创建了一些通过索引获取键和通过键获取值的扩展方法。

public static T GetKey<T>(this OrderedDictionary dictionary, int index)
{
    if (dictionary == null)
    {
        return default(T);
    }

    try
    {
        return (T)dictionary.Cast<DictionaryEntry>().ElementAt(index).Key;
    }
    catch (Exception)
    {
        return default(T);
    }
}

public static U GetValue<T, U>(this OrderedDictionary dictionary, T key)
{
    if (dictionary == null)
    {
        return default(U);
    }

    try
    {
        return (U)dictionary.Cast<DictionaryEntry>().AsQueryable().Single(kvp => ((T)kvp.Key).Equals(key)).Value;
    }
    catch (Exception)
    {
        return default(U);
    }
}
于 2015-07-02T21:00:17.523 回答