我有这个问题:
我想从对象信息中生成新的源代码文件。
我做了这样的事情:
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>
任何人都可以帮助我吗?
答案 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作为输出语言。