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.

Était-ce utile?

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);

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top