Почему я не могу вернуть IEnumerable <IGrouping <A, B >> как IEnumerable <IEnumerable <B >>

1

Я использовал GroupBy() и создал IEnumerable<IGrouping<TKey,TValue>>.

И я могу предусмотреть его и передать каждый элемент (каждый IGrouping<TKey,TValue>) в метод, который принимает IEnumerable<TValue>

Это неудивительно - IGrouping<TKey,TValue> реализует IEnumerable<TValue>

Но если я определяю метод, который принимает IEnumerable<IEnumerable<B>>, то я не могу напрямую передать вывод GroupBy(), хотя это IEnumerable<> и каждый элемент внутри него является IEnumerable<B>

Зачем?

  • 0
    Меня устраивает. Разместите точную сигнатуру метода и то, как вы его называете. Я думаю, ваш B не соответствует TValue .
  • 3
    IEnumerable<out T> является ковариантным, поэтому он должен работать. Смотри эту скрипку .
Показать ещё 3 комментария
Теги:
linq
ienumerable
igrouping

1 ответ

0
Лучший ответ

Как уже отмечалось несколькими людьми (и, как я уже знал в затылке), это просто ковариационная проблема и только ломается в среде pre-.NET 4.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню