Prenons l'extension suivante de la méthode:
static class Extensions
{
public static bool In<T>(this T t, params T[] values)
{
return false;
}
}
Je suis curieux de savoir pourquoi ce code compile et s'exécute:
var x = new Object();
IEnumerable<int> p = new List<int> { 1, 2, 3 };
var t2 = x.In(p);
Au sein d' In
, values
est Object[]
, comme si l' List<int>
est converti à la volée à un tableau. Pour moi, il semble qu' params T[]
ne correspond pas à IEnumerable<int>
, c'est pourquoi je suis surpris de ce court même.
Maintenant ce code:
var x = 5;
IEnumerable<int> p = new List<int> { 1, 2, 3 };
var t2 = x.In(p);
Ne pas exécuter et de générer l'erreur de compilateur:
Erreur 2 Argument 2: impossible de convertir de 'Système.Les Collections.Génériques.IEnumerable' int[]'
C'est ce que je m'attendrais à partir de la première en fait. Quelqu'un peut m'expliquer ce qu'il se passe ici? Merci!