Wie erhalte ich einen Schlüssel aus einem OrderedDictionary in C # durch den Index?

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

  •  19-09-2019
  •  | 
  •  

Frage

Wie erhalte ich den Schlüssel und den Wert der Artikel aus OrderedDictionary durch den Index?

War es hilfreich?

Lösung

Es gibt keine direkten integrierte Möglichkeit, dies zu tun. Dies liegt daran, für einen OrderedDictionary des Index ist der Schlüssel; wenn Sie den eigentlichen Schlüssel wollen, dann müssen Sie es selbst verfolgen. Wahrscheinlich ist der direkteste Weg ist, um die Schlüssel zu einer Wende Sammlung zu kopieren:

// 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]
    );
}

Sie können dieses Verhalten in eine neue Klasse kapseln, die den Zugriff auf die OrderedDictionary einwickelt.

Andere Tipps

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

Ich habe einige Erweiterungsmethoden, die den Schlüssel durch den Index und den Wert von Schlüssel erhalten mit dem Code bereits erwähnt.

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);
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top