Нека вземем следния метод за разширение:
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“ в „int[]“
Това всъщност бих очаквал от първия. Може ли някой да обясни какво става тук? Благодаря!