Я использовал GroupBy()
и создал IEnumerable<IGrouping<TKey,TValue>>
.
И я могу предусмотреть его и передать каждый элемент (каждый IGrouping<TKey,TValue>
) в метод, который принимает IEnumerable<TValue>
Это неудивительно - IGrouping<TKey,TValue>
реализует IEnumerable<TValue>
Но если я определяю метод, который принимает IEnumerable<IEnumerable<B>>
, то я не могу напрямую передать вывод GroupBy()
, хотя это IEnumerable<>
и каждый элемент внутри него является IEnumerable<B>
Зачем?
Как уже отмечалось несколькими людьми (и, как я уже знал в затылке), это просто ковариационная проблема и только ломается в среде pre-.NET 4.
B
не соответствуетTValue
.IEnumerable<out T>
является ковариантным, поэтому он должен работать. Смотри эту скрипку .