ILookup <TKey, TVal> против IGrouping <TKey, TVal>

у нас были проблемы с выражением различий междуILookup а такжеIGroupingи мне любопытно, правильно ли я сейчас понимаю. LINQ усугубил проблему, производя последовательностиIGrouping предметы, а также дает мнеToLookup метод расширения. Мне казалось, что они были одинаковыми, пока я не посмотрел поближе.

var q1 = 
    from n in N
    group n by n.MyKey into g
    select g;
// q1 is IEnumerable

Что эквивалентно:

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

Который выглядит очень похоже на:

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

Я прав в следующих аналогиях?

IGrouping является единственной группой (то есть последовательностью с ключом), аналогичнойKeyValuePair где значение на самом деле представляет собой последовательность элементов (а не один элемент)IEnumerable это последовательность из них (аналогично тому, что вы получаете при перебореIDictionaryILookup больше похоже наIDictionary где значение на самом деле является последовательностью элементов

Ответы на вопрос(3)

Ваш ответ на вопрос