Как создать универсальный класс, используя CodeDOM, чей универсальный параметр является типом, который я создал? - PullRequest
7 голосов
/ 29 февраля 2012

У меня есть класс, который я создал с помощью CodeDOM:

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

Я хочу создать список типа SomeClass. Однако я не могу этого сделать:

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

CodeTypeReference не принимает CodeTypeDeclaration, что мне и нужно. Что я могу сделать? Я не хочу передать имя класса в виде строки, так как это может привести к ошибкам.

Ответы [ 2 ]

5 голосов
/ 29 февраля 2012

Боюсь, ты не сможешь. Кажется, нет никакого способа создать CodeTypeReference из CodeTypeDeclaration. Я думаю , потому что CodeTypeDeclaration не знает, в каком пространстве имен оно находится, поэтому нет безопасного способа сделать это.

С другой стороны, при создании CodeTypeReference для универсального типа вам не нужно использовать имя универсального типа:

var listType = new CodeTypeReference(typeof(List<>));
listType.TypeArguments.Add(typeof(int));
1 голос
/ 08 января 2015

Выбранный ответ не работал для меня по любой причине, но это сработало:

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

См. Документацию здесь.

...