Pas sûr à 100% de la réponse vu que c'est assez difficile à comprendre :
La classe Formulairefield hérite de Formulaire, qui implémente IFormulaire<Formulairefield>, d'où le fait que tu aies mis dans la classe Formulaire :
public List<Formulairefield> ListField { get; set; }
pour implémenter l'interface.
Jusque là OK.
Sauf que ta classe Formulairefield implémente IFormulaireField, qui elle-même "hérite" de IFormulaire<IFormulaireField>, donc il faudrait mettre dans la classe Formulairefield pour respecter l'implémentation correctement :
public List<IFormulaireField> ListField { get; set; }
Le problème c'est que l'implémentation existe déjà dans Formulaire (le code au balisé en premier). Je ne sais pas si c'est exactement ça le problème, mais du coup tu essayes de faire cohabiter un List<Formulairefield> et List<IFormulaireField>, et comme un IFormulaireField n'est pas (c'est pas de l'héritage mais tu as compris) forcément un Formulairefield, ça pose problème.
Solution :
1) Virer
IFormulaire<IFormulaireField>
de la ligne 14, car il sert pas à grand chose, et ça permet d'implémenter une fois la liste, mais si tu estimes que tu en as besoin, alors, autre solution :
2) Change
public class Formulaire : IFormulaire<Formulairefield>
{
public List<Formulairefield> ListField { get; set; }
par
public class Formulaire : IFormulaire<IFormulaireField>
{
public List<IFormulaireField> ListField { get; set; }
ce qui permet d'avoir le même type (IFormulaireField) pour la liste, bien que venant de deux interfaces différentes.