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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top