2009-01-04 19 views
11

¿Hay alguna manera de generar una restricción de clase con CodeDom?CodeDom restricción de tipo genérico

Porque cuando uso algo así 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 he encontrado es utilizar un espacio al principio antes de la clase

genericParam.Constraints.Add(" class"); 

Pero esto parece ser, en el mejor de los casos, una solución.

Respuesta

6

Parece que no hay manera straigntforward para especificar que la restricción. Ni for the "struct" constraint.

Para la "T: nueva) (" restricción de usar la bandera HasConstructorConstraint

Para el resto utilizar CodeTypeReference como en this msdn example.

0

También uso espacio de anchura cero ("\x200Bclass") en lugar de espacio normal. Luego lo reemplazo en la secuencia final con una cadena vacía: .Replace("\x200B", string.Empty);

Cuestiones relacionadas