Contrainte de type générique CodeDom
Question
Est-il possible de générer une contrainte de classe avec CodeDom?
Parce que quand j'utilise quelque chose comme
var method = new CodeMemberMethod();
var genericParam = new CodeTypeParameter("InterfaceType");
genericParam.Constraints.Add("class");
method.TypeParameters.Add(genericParam);
le code généré est comme
private InterfaceType GetImpl<InterfaceType>()
where InterfaceType : @class
{
}
La meilleure solution que j’ai trouvée consiste à utiliser un espace blanc avant la classe
.genericParam.Constraints.Add(" class");
Mais cela semble être au mieux une solution de contournement.
La solution
Il semble qu’il n’existe aucun moyen simple de spécifier cette contrainte. Ni pour la " struct " contrainte .
Pour le " T: new () " contrainte utiliser l'indicateur HasConstructorConstraint
Pour le reste, utilisez CodeTypeReference comme dans cet exemple de msdn .
Autres conseils
J'utilise également un espace de largeur nulle ( "\ x200Bclass"
) au lieu d'un espace normal. Ensuite, je le remplace dans la chaîne finale par une chaîne vide: .Replace ("\ x200B", string.Empty);