考虑到通过反射找到的.NET类型对象,是否可以将此类型打印或反编译为C#声明,同时考虑C#类型别名等?
例如,
Int32 -> int
String -> string
Nullable<Int32> -> int?
List<au.net.ExampleObject> -> List<ExampleObject>
我希望能够打印出与源中最初编写的方法相近的方法。
如果.NET框架中没有任何内容,是否有第三方库?我可能会看一下ILSpy。
答案 0 :(得分:7)
请参阅this回答。
示例:强>
using System.CodeDom;
using System.CodeDom.Compiler;
CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
var typeRef = new CodeTypeReference("System.Nullable`1[System.Int32]");
string typeOutput = provider.GetTypeOutput(typeRef); // "System.Nullable<int>"
它会帮助您处理int
和string
- 类似的事情以及泛型,但是您必须自己制定Nullable<T> -> T?
和using
。
答案 1 :(得分:1)
将别名编译为它们的别名。你永远不会知道来源中是string
还是String
,坦白说我不明白为什么会这么重要。
答案 2 :(得分:1)
There are only 15 aliases (+Nullable)。只需在这些上使用string.Replace。
答案 3 :(得分:0)
another post中有类型声明的解决方案。 您可以将其扩展为轻松支持类型别名。
答案 4 :(得分:0)
本文的c#source源代码可以执行此操作:http://www.codeproject.com/Tips/621812/User-friendly-names-for-Types