Я обнаружил, что сам пытаюсь реализовать тот же случай , упомянутый в комментариях:
void doIt<T>(IEnumerable<T> what) { }
void doIt<T>(T whats) { }
I исключено следующий код для ссылки на первый метод :
doIt(new List<T>());
Но на самом деле ссылается на второй .
Одним из решений является приведение аргумента следующим образом:
doIt(new List<T>().AsEnumerable<T>());
Приведение может быть скрыто другой перегрузкой:
void doIt<T>(List<T> whats) {
doIt(whats.AsEnumerable<T>());
}