Как получить ключ и значение элемента из OrderedDictionary по индексу?
Как получить ключ из OrderedDictionary в С# по индексу?
Ответ 1
Существует нет прямого встроенного способа сделать это. Это связано с тем, что для 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
.
Ответ 2
orderedDictionary.Cast<DictionaryEntry>().ElementAt(index);
Ответ 3
Я создал некоторые методы расширения, которые получают ключ по индексу и значение по ключу, используя код, упомянутый ранее.
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);
}
}