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

Mam problemy z wyrażeniem różnic między nimiILookup<TKey, TVal> iIGrouping<TKey, TVal>i jestem ciekawy, czy teraz dobrze to rozumiem. LINQ pogłębił problem, tworząc sekwencjeIGrouping przedmioty, jednocześnie dając miToLookup metoda rozszerzenia. Więc wydawało się, że są takie same, dopóki nie przyjrzałem się bliżej.

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

Które jest równoważne:

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

Który wygląda jak:

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

Czy mam rację w następujących analogiach?

NaIGrouping<TKey, TVal> jest pojedynczą grupą (tj. sekwencją kluczowaną), analogiczną doKeyValuePair<TKey, TVal> gdzie wartość jest w rzeczywistości sekwencją elementów (a nie pojedynczym elementem)NaIEnumerable<IGrouping<TKey, TVal>> jest sekwencją tych (podobną do tej, którą otrzymujesz podczas iteracji poIDictionary<TKey, TVal>NaILookup<TKey, TVal> jest bardziej jakIDictionary<TKey, TVal> gdzie wartość jest w rzeczywistości sekwencją elementów

questionAnswers(3)

yourAnswerToTheQuestion