Возьмем следующий метод расширения:
static class Extensions
{
public static bool In<T>(this T t, params T[] values)
{
return false;
}
}
Мне любопытно, почему этот код компилируется и запускается:
var x = new Object();
IEnumerable<int> p = new List<int> { 1, 2, 3 };
var t2 = x.In(p);
Внутри In
, values
является Object[]
, как будто List<int>
преобразуется "на лету" в массив. Мне кажется, что params T[]
не соответствует IEnumerable<int>
, поэтому я удивлен, что это даже работает.
Теперь этот код:
var x = 5;
IEnumerable<int> p = new List<int> { 1, 2, 3 };
var t2 = x.In(p);
Не запускается и не генерирует ошибку компилятора:
Ошибка 2 Аргумент 2: невозможно преобразовать из 'System.Collections.Generic.IEnumerable' to 'int []'
Это то, чего я ожидаю от первого на самом деле. Может кто-нибудь объяснить, что здесь происходит? Спасибо!