2012-02-28 22 views
7

tengo una clase que he creado usando CodeDOM:¿Cómo crear una clase genérica usando CodeDOM cuyo parámetro genérico es un tipo que creé?

CodeTypeDeclaration some_class = new CodeTypeDeclaration("SomeClass"); 
// ... properties and methods creation elided 

que desea crear una lista del tipo "SomeClass". Sin embargo, me parece que no puede hacerlo:

var list_type = new CodeTypeReference(typeof (List<>).Name, ??? some_class ???); 
var member_field = new CodeMemberField(list_type, field_name) 
             { 
               Attributes = MemberAttributes.Private, 
             }; 

CodeTypeReference no acepta una CodeTypeDeclaration, que es lo que necesito. ¿Que puedo hacer? I no desea querer pasar el nombre de clase como una cadena, ya que esto podría generar errores.

+0

Cómo habría de pasar la propiedad Name de la declaración de tipo d ser cualquier ifferent de usar el nombre propiedad de typeof (List <>)? – tyranid

+0

@tyranid 'typeof (list <>)' se basa en la reflexión para recuperar el nombre; pero veo tu punto ... podría usar list_type.Name, ¿verdad? –

Respuesta

4

Me temo que no puedes. No parece haber ninguna manera de crear un CodeTypeReference desde un CodeTypeDeclaration. Creo que es porque CodeTypeDeclaration no sabe en qué espacio de nombres está, por lo que no hay una manera segura de hacerlo.

Por otro lado, cuando se crea un tipo genérico CodeTypeReference a, no es necesario utilizar el nombre del tipo genérico:

var listType = new CodeTypeReference(typeof(List<>)); 
listType.TypeArguments.Add(typeof(int)); 
+0

El problema es que me gustaría hacer 'TypeArguments.Add (my_type_declaration)'. Creo que tendré que ver con usar el nombre de mi tipo de todos modos. ¡Gracias! –

1

La respuesta elegida no funcionó para mí por cualquier razón , pero esto hizo:

var listType = new CodeTypeReference("List", new[] { new CodeTypeReference(typeof(int)) });

See documentation here.

Cuestiones relacionadas