TypeNameFormatter.Sources 1.1.1

需要 NuGet 2.8 或更高版本。

dotnet add package TypeNameFormatter.Sources --version 1.1.1                
NuGet\Install-Package TypeNameFormatter.Sources -Version 1.1.1                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用了 NuGet 模块的 Install-Package 版本。
<PackageReference Include="TypeNameFormatter.Sources" Version="1.1.1">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中以引用包。
paket add TypeNameFormatter.Sources --version 1.1.1                
#r "nuget: TypeNameFormatter.Sources, 1.1.1"                
#r 指令可用于 F# Interactive 和多语言笔记本。将此内容复制到交互工具或脚本的源代码中以引用包。
// Install TypeNameFormatter.Sources as a Cake Addin
#addin nuget:?package=TypeNameFormatter.Sources&version=1.1.1

// Install TypeNameFormatter.Sources as a Cake Tool
#tool nuget:?package=TypeNameFormatter.Sources&version=1.1.1                

TypeNameFormatter 是一个小型的 .NET 库,用于按照 C# 的方式格式化类型名称。

这有什么作用?

你是否曾经遇到过 Type 对象难以理解的格式化?

var someType = typeof(IEnumerable<int[]>);

Console.WriteLine(someType);
// => System.Collections.Generic.IEnumerable`1[System.Int32[]]

如果你更希望看到类似 C# 类型名称的格式,那么这个库可能适合你

using TypeNameFormatter;

var someType = typeof(IEnumerable<int[]>);

Console.WriteLine(someType.GetFormattedName());
// => IEnumerable<int[]>

格式化任何 Type 都需要比您可能预期的更多特殊情况(例如泛型类型、嵌套类型、多维和锯齿形数组、引用和指针类型)。库处理所有这些,无需您自己处理。

我该如何使用它?

通过导入 TypeNameFormatter 命名空间,以下扩展方法 becomes 可用

  • stringBuilder.AppendFormattedName(Type type, [TypeNameFormatOptions options]):
    将 C# 格式的类型名称追加到给定的 StringBuilder

  • type.GetFormattedName([TypeNameFormatOptions options]):
    作为字符串返回 C# 格式的类型名称。 (这是一个方便的方法,它与上面的方法完全相同,使用一个一次性 StringBuilder。)

这两个方法都允许您指定以下 TypeNameFormatOptions 标志的任意组合

  • 命名空间:
    应包含命名空间。(例如,System.Action 而不是 Action。)

  • NoAnonymousTypes:
    不应将匿名类型的“display class”名称转换成更易读的语法。(例如,˂˃f__AnonymousType5˂string, int˃ 而不是 {string Name, int Count}。)

  • NoGenericParameterNames:
    开放泛型类型的参数名称应省略。(例如,IEnumerable˂˃而不是IEnumerable˂T˃。注意,此设置不影响封闭泛型类型;它们的参数始终被包括。)

  • 无关键字:
    原始类型不应映射到对应的C#语言关键字。(例如,Int32而不是int。)

  • 无可空问号:
    可空类型不应使用C#的问号语法进行格式化。(例如,Nullable˂int˃而不是int?。)

  • 无元组:
    值元组类型不应使用C#的元组语法进行格式化。(例如,ValueTuple˂bool, int˃而不是(bool, int)。)

但格式化˂某种类型˃不正确!

如果您认为您找到了一个错误,请提交一个问题,以便调查。(请务必提及类型未按预期格式化。)

替代方案

  • 如果您针对.NET Framework,可以使用老旧的System.CodeDom(不过速度并不快)

    using Microsoft.CSharp;
    using System.CodeDom;
    
    static string GetFormattedName(this Type type)
    {
         using (var provider = new CSharpCodeProvider())
         {
             var typeReference = new CodeTypeReference(type);
             return provider.GetTypeOutput(typeReference);
         }
    }
    
  • 或许可以使用微软的.NET编译平台(Roslyn),但这是一个包含很多不需要的功能的大型库。

此包中没有支持的框架资源。

了解有关目标框架.NET标准的更多信息。

此包没有依赖项。

NuGet包

此包未由任何NuGet包使用。

GitHub仓库 (4)

显示依赖TypeNameFormatter.Sources的前4个最受欢迎的GitHub仓库

仓库 星级
devlooped/moq
最受欢迎和友好的.NET模拟框架
moq/labs
最受欢迎和友好的.NET模拟框架
lindexi/lindexi_gd
博客用到的代码
devlooped/avatar
一个现代编译时生成的拦截/代理库
版本 下载 最后更新
1.1.1 341,374 1/16/2021
1.1.0 1,967 11/12/2020
1.0.1 6,294 12/30/2018
1.0.0 9,879 7/11/2018
1.0.0-beta3 2,217 6/7/2018
1.0.0-beta 2,124 5/24/2018
1.0.0-alpha 2,475 5/24/2018