2012-07-02 27 views
5

Tôi có vấn đề này:Làm thế nào để tái sử dụng Kiểu giá trị trả về để tạo ra mã nguồn mới

Tôi muốn tạo ra một tập tin mã nguồn mới từ một thông tin đối tượng.

tôi làm một cái gì đó như thế này:

dictParamMapping là một Dictionary<string, Type> nơi chuỗi là một tên biến và Type là kiểu của biến đó.

tôi nhận được các loại để xây dựng mã mới sử dụng:

dictParamMapping[pairProcess.Value].Type.Name (or FullName) 

Khi Type là int, string, DataTable vv ... tất cả mọi thứ hoạt động tốt nhưng khi nó là một cuốn từ điển, danh sách hoặc bất kỳ khác như rằng nó trả về một cái gì đó như:

System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Double, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] 

Điều gì không đúng để xây dựng mã nguồn mới. Tôi muốn nhận một số thông tin như Dictionary<int, double>

Có thể giúp tôi bất kỳ ai không?

+2

Bạn đã xem ['GetGenericTypeDefinition'] (http://msdn.microsoft.com/en-us/library/system.type.getgenerictypedefinition.aspx) và [' GetGenericArguments'] (http: // msdn. microsoft.com/en-us/library/system.type.getgenericarguments.aspx)? –

+0

Vì vậy, bạn muốn nhận bí danh C# cho các kiểu nguyên thủy? – abatishchev

+0

Để abatishchev: Vâng, đó là ý tưởng. Để O. R. Mapper: GetGenericArguments trả về cho tôi loại kiểu bên trong nhưng khi một cấu trúc dữ liệu như Dictionary > buộc tôi tạo một hàm đệ quy để phát hiện nó. – pasapepe

Trả lời

3

Dường như bạn muốn nhận được tên tương thích C# từ System.Type. Bạn có thể làm điều này với lớp học CSharpCodeProvider.

var typeReference = new CodeTypeReference(typeof(Dictionary<int, double>)); 

using (var provider = new CSharpCodeProvider()) 
    Console.WriteLine(provider.GetTypeOutput(typeReference)); 

Output:

System.Collections.Generic.Dictionary<int, double> 

Lưu ý rằng điều này không đảm bảo luôn cung cấp cho bạn với một loại tên hợp lệ. Đặc biệt, các kiểu do trình biên dịch tạo ra (chẳng hạn như đối với các bao đóng) thường sẽ có các tên kiểu không hợp lệ trong C#.

+0

Hoàn hảo !!! Cảm ơn rất nhiều ;) – pasapepe

2

Đây không phải là cách lý tưởng để tạo mã nguồn trong .NET. Có những cách hỗ trợ chính thức để thực hiện.

API được tiếp xúc bởi khung được gọi là CodeDOM. Bạn có thể khám phá tài liệu và các mẫu để có ý tưởng về những gì nó có thể làm. Here's a startup sample, cho biết cách tạo lớp học. CodeDOM hỗ trợ cả C# và VB.NET làm ngôn ngữ đầu ra.

+0

Cảm ơn, nó hoạt động;) – pasapepe

Các vấn đề liên quan