Restricción de tipo genérico de CodeDom
Pregunta
¿Hay alguna manera de generar una restricción de clase con CodeDom?
Porque cuando uso algo como
var method = new CodeMemberMethod();
var genericParam = new CodeTypeParameter("InterfaceType");
genericParam.Constraints.Add("class");
method.TypeParameters.Add(genericParam);
el código generado es como
private InterfaceType GetImpl<InterfaceType>()
where InterfaceType : @class
{
}
La mejor solución que encontré es usar un espacio en blanco antes de la clase
genericParam.Constraints.Add(" class");
Pero esto parece ser, en el mejor de los casos, una solución alternativa.
Solución
Parece que no hay una forma sencilla de especificar esa restricción. Ni para el " struct " restricción .
Para el " T: new () " restricción use la bandera HasConstructorConstraint
Para el resto, use CodeTypeReference como en este ejemplo de msdn .
Otros consejos
También uso el espacio de ancho cero ( " \ x200Bclass "
) en lugar del espacio normal. Luego lo reemplazo en la cadena final con una cadena vacía: .Replace (" \ x200B " ;, string.Empty);