2012-02-28 27 views
7

Tôi có một lớp mà tôi tạo ra sử dụng CodeDOM:Làm thế nào để tạo một lớp chung bằng cách sử dụng CodeDOM có tham số chung là một kiểu mà tôi đã tạo?

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

Tôi muốn tạo ra một danh sách của "SomeClass" loại. Tuy nhiên, tôi dường như không thể làm như vậy:

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

CodeTypeReference không chấp nhận một CodeTypeDeclaration, đó là những gì tôi cần. Tôi có thể làm gì? Tôi không muốn chuyển tên lớp thành chuỗi, vì điều này có thể dẫn đến lỗi.

+0

Làm thế nào sẽ đi qua thuộc tính Name của việc kê khai loại được bất kỳ d ifferent từ việc sử dụng thuộc tính tên của typeof (List <>)? – tyranid

+0

@tyranid 'typeof (danh sách <>)' dựa trên sự phản chiếu để lấy tên; nhưng tôi thấy quan điểm của bạn ... Tôi có thể sử dụng list_type.Name, phải không? –

Trả lời

4

Tôi e rằng bạn không thể. Dường như không có cách nào để tạo ra một CodeTypeReference từ một số CodeTypeDeclaration. Tôi nghĩ rằng đó là bởi vì CodeTypeDeclaration không biết không gian tên đó là gì, vì vậy không có cách nào an toàn để thực hiện điều đó.

Mặt khác, khi tạo một CodeTypeReference để loại chung chung, bạn không cần phải sử dụng tên của các loại chung:

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

Vấn đề là tôi muốn làm 'TypeArguments.Add (my_type_declaration)'. Tôi nghĩ rằng tôi sẽ phải làm với việc sử dụng tên của loại của tôi anyway. Cảm ơn! –

1

Câu trả lời được lựa chọn không làm việc cho tôi vì lý do gì , nhưng điều này đã làm:

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

See documentation here.