如何重用Type返回值来生成新的源代码

时间:2012-07-02 13:45:42

标签: c# .net-2.0

我有这个问题:

我想从对象信息中生成新的源代码文件。

我做了这样的事情:

dictParamMapping是Dictionary<string, Type>,其中字符串是变量名,Type是该变量的类型。

我使用以下方式获取构建新代码的类型:

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

当Type是int,string,datatable等...一切正常但是当它是一个字典,列表或任何其他类似的东西时它会返回如下内容:

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]]

构建新源代码不正确。我希望得到类似Dictionary<int, double>

的内容

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:3)

您似乎希望从System.Type获取与C#兼容的名称。您可以使用CSharpCodeProvider类执行此操作。

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

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

输出:

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

请注意,并不保证始终为您提供有效的类型名称。特别是,编译器生成的类型(例如闭包)通常具有在C#中无效的类型名称。

答案 1 :(得分:2)

这不是在.NET中生成源代码的理想方式。 有官方支持的方式。

框架公开的API称为CodeDOM。您可以浏览文档和示例,以了解它可以执行的操作。 Here's a startup sample,展示了如何生成一个类。 CodeDOM支持C#和VB.NET作为输出语言。