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
<PackageReference Include="TypeNameFormatter.Sources" Version="1.1.1"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
paket add TypeNameFormatter.Sources --version 1.1.1
#r "nuget: TypeNameFormatter.Sources, 1.1.1"
// 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),但这是一个包含很多不需要的功能的大型库。
此包没有依赖项。
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 |