tag propiedad formularios ejemplos c# extension-methods

formularios - propiedad tag c#



Confundido en cuanto a por qué este código C#se compila, mientras que un código similar no lo hace (1)

Inferencia de tipos convierte tu primera llamada a

In<object>(x, p);

Los parámetros de este método genérico cerrado son object, params object[] .
Por lo tanto, pasar p implícitamente lo convierte en un object , que se convierte en el único elemento en la matriz params.

Su segunda llamada se infiere (debido al primer parámetro) para

In<int>(x, p);

Aquí, el segundo parámetro puede ser un int[] (pasando directamente una matriz) o una serie de int s (a través de params ).
Ya que IEnumerable<int> no es ninguno de esos, obtienes un error.

Tomemos el siguiente método de extensión:

static class Extensions { public static bool In<T>(this T t, params T[] values) { return false; } }

Tengo curiosidad por saber por qué este código se compila y ejecuta:

var x = new Object(); IEnumerable<int> p = new List<int> { 1, 2, 3 }; var t2 = x.In(p);

Dentro de, los values son un Object[] , como si la List<int> se convierte al vuelo en una matriz. Para mí, parece que los params T[] no coinciden con IEnumerable<int> , por lo que me sorprende que esto incluso se ejecute.

Ahora este código:

var x = 5; IEnumerable<int> p = new List<int> { 1, 2, 3 }; var t2 = x.In(p);

No se ejecuta y genera el error del compilador:

Error 2 Argumento 2: no se puede convertir de ''System.Collections.Generic.IEnumerable'' a ''int []''

Esto es lo que esperaría de la primera en realidad. ¿Alguien puede explicar lo que está pasando aquí? ¡Gracias!