Как мне получить ключ из OrderedDictionary в C # по индексу?

StackOverflow https://stackoverflow.com/questions/2229951

  •  19-09-2019
  •  | 
  •  

Вопрос

Как мне получить ключ и значение элемента из OrderedDictionary по индексу?

Это было полезно?

Решение

Прямого встроенного способа сделать это не существует.Это происходит потому, что для 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.

Другие советы

orderedDictionary.Cast<DictionaryEntry>().ElementAt(index);

Я создал несколько методов расширения, которые получают ключ по индексу и значение по ключу, используя код, упомянутый ранее.

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);
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top