ILookup <TKey, TVal> vs. IGrouping <TKey, TVal>

Ich habe Probleme, die Unterschiede zwischen zu artikulierenILookup<TKey, TVal> undIGrouping<TKey, TVal>und bin gespannt ob ich es jetzt richtig verstehe. LINQ verschärfte das Problem, indem es Sequenzen vonIGrouping Gegenstände und gib mir auch eineToLookup Erweiterungsmethode. Es fühlte sich so an, als wären sie gleich, bis ich genauer hinschaute.

var q1 = 
    from n in N
    group n by n.MyKey into g
    select g;
// q1 is IEnumerable<IGrouping<TKey, TVal>>

Welches ist gleichbedeutend mit:

var q2 = N.GroupBy(n => n.MyKey, n => n);
// q2 is IEnumerable<IGrouping<TKey, TVal>>

Welches sieht viel aus wie:

var q3 = N.ToLookup(n => n.MyKey, n => n);
// q3 is ILookup<TKey, TVal>

Bin ich in den folgenden Analogien richtig?

EinIGrouping<TKey, TVal> ist eine einzelne Gruppe (d. h. eine codierte Sequenz), analog zuKeyValuePair<TKey, TVal> wobei der Wert tatsächlich eine Folge von Elementen ist (anstatt eines einzelnen Elements)EinIEnumerable<IGrouping<TKey, TVal>> ist eine Folge von diesen (ähnlich wie bei der Iteration über eineIDictionary<TKey, TVal>EinILookup<TKey, TVal> ist eher wie einIDictionary<TKey, TVal> wobei der Wert tatsächlich eine Folge von Elementen ist

Antworten auf die Frage(3)

Ihre Antwort auf die Frage