从 CLR 样式类型全名获取 C# 样式类型引用

发布于 2024-11-14 12:01:16 字数 394 浏览 3 评论 0原文

给定通过反射找到的 .NET 类型对象,是否可以将该类型漂亮地打印或反编译为 C# 声明,同时考虑到 C# 类型别名等?

例如,

Int32 -> int
String -> string   
Nullable<Int32> -> int?
List<au.net.ExampleObject> -> List<ExampleObject>

我希望能够打印出与源代码中最初编写的内容接近的方法。

如果.NET框架中没有任何东西,是否有第三方库?我可能会看看 ILSpy

Given a .NET type object found through reflection, is it possible to pretty print or decompile this type as a C# declaration, taking into account C# type aliases, etc.?

For example,

Int32 -> int
String -> string   
Nullable<Int32> -> int?
List<au.net.ExampleObject> -> List<ExampleObject>

I want to be able to print out methods close to what was originally written in the source.

If there isn't anything in the .NET framework, is there a third-party library? I might possibly have a look at ILSpy.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

泪之魂 2024-11-21 12:01:16

请参阅这个答案。

示例:

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

它将帮助您处理intstring之类的东西,以及泛型,但是您必须解决可空-> T?使用你自己。

See this answer.

Example:

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

It will help you with int and string-like things, as well as generics, however you'll have to work out Nullable<T> -> T? and usings yourself.

热情消退 2024-11-21 12:01:16

别名被编译为它们的别名。您永远不会知道源代码中它是 string 还是 String,坦率地说,我不明白为什么它很重要。

Aliases are compiled to what they are an alias for. You will never know if it was string or String in the source and frankly I can't see why it would matter.

夜访吸血鬼 2024-11-21 12:01:16

只有 15 个别名(+可为空)。只需对这些使用 string.Replace 即可。

There are only 15 aliases (+Nullable). Just use string.Replace on these.

沫雨熙 2024-11-21 12:01:16

中有类型声明的解决方案另一篇文章
您可以轻松扩展它以支持类型别名。

There is a solution for type declarations in another post .
You can extend it to support type aliases easily.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文