Давайте рассмотрим следующий упрощенный пример:
void Foo<T>(IEnumerable<T> collection, params T[] items)
{
// ...
}
void Foo<C, T>(C collection, T item)
where C : ICollection<T>
{
// ...
}
void Main()
{
Foo((IEnumerable<int>)new[] { 1 }, 2);
}
Компилятор говорит:
Тип «System.Collections.Generic.IEnumerable» нельзя использовать в качестве параметра типа «C» в универсальном типе или методе «UserQuery.Foo (C, T)». Не существует неявного преобразования ссылок из System.Collections.Generic.IEnumerable в System.Collections.Generic.ICollection.
Если я изменю Main
на:
void Main()
{
Foo<int>((IEnumerable<int>)new[] { 1 }, 2);
}
Это будет работать нормально. Почему компилятор не выбирает правильную перегрузку?