Я обновил вопрос с коротким примером.
жный дубликат:
Нет вывода типа с универсальным методом расширения
Рассмотрим два метода:
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 цента.