Vincolo di tipo generico CodeDom
Domanda
Esiste un modo per generare un vincolo di classe con CodeDom.
Perché quando uso qualcosa del genere
var method = new CodeMemberMethod();
var genericParam = new CodeTypeParameter("InterfaceType");
genericParam.Constraints.Add("class");
method.TypeParameters.Add(genericParam);
il codice generato è come
private InterfaceType GetImpl<InterfaceType>()
where InterfaceType : @class
{
}
La migliore soluzione che ho trovato è usare uno spazio bianco prima della lezione
genericParam.Constraints.Add(" class");
Ma questo sembra essere nella migliore delle ipotesi una soluzione alternativa.
Soluzione
Sembra che non ci sia un modo diretto per specificare quel vincolo. Né per " struct " vincolo.
Per " T: new () " il vincolo usa il flag HasConstructorConstraint
Per il resto usa CodeTypeReference come in questo esempio msdn .
Altri suggerimenti
Uso anche lo spazio a larghezza zero ( " \ x200Bclass "
) anziché lo spazio normale. Quindi lo sostituisco nella stringa finale con stringa vuota: .Replace (" \ x200B " ;, string.Empty);