Pourquoi, avec une contrainte générique sur le paramètre de type T de «doit hériter de A», le premier appel réussit-il mais le second échoue avec l'erreur de conversion de type détaillée dans le commentaire :Erreur de conversion de type C# malgré la contrainte générique
abstract class A { }
static class S
{
public static void DoFirst(A argument) { }
public static void DoSecond(ICollection<A> argument) { }
}
static class P<T>
where T : A, new()
{
static void Do()
{
S.DoFirst(new T()); // this call is OK
S.DoSecond(new List<T>()); // this call won't compile with:
/* cannot convert from 'System.Collections.Generic.List<T>'
to 'System.Collections.Generic.ICollection<A>' */
}
}
pas Si la contrainte générique faire en sorte que List<T>
est en effet ICollection<A>
?
Fermeture comme dupe - s'il vous plaît voir http://stackoverflow.com/questions/981570/c-no-implict-conversion-from-classchild-to-classbase –