Я обновил вопрос с коротким примером.

жный дубликат:
Нет вывода типа с универсальным методом расширения

Рассмотрим два метода:

public static IEnumerable<V> Merge<V>
       (this IEnumerable<IEnumerable<V>> coll)

public static IEnumerable<V> Merge<T, V>
       (this IEnumerable<T> coll) 
              where T : IEnumerable<V>

Оба компилируются просто отлично, в обоих случаях тип универсальных типов будет известен во время компиляции вызывающей стороны, и, следовательно, точный тип расширенного типа.

Вы можете назвать оба отлично, но только первый как расширение.

Почему?

Обновление 1

Чтобы увидеть сбой, используйте второй метод и такой пример:

    var x = new List<List<int>>();
    var y = x.Merge();
Обновление - закрытие

Ребята, вы не думаете, что оригинальная публикация слишком сложна, чтобы получить ясную картину? В образовательных целях я думаю, что этот пост не следует закрывать, даже если технически (то есть ответ) он дублирован. Просто мои 2 цента.

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

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