Humanizer 字符串大小写转换门面类 `To` 完全指南:四个内置 Transformer 与链式 Transform 的用法与源码解析

发布时间:2026/9/25 1:37:31
Humanizer 字符串大小写转换门面类 `To` 完全指南:四个内置 Transformer 与链式 Transform 的用法与源码解析 开发工具【免费下载链接】HumanizerHumanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities项目地址https://gitcode.com/gh_mirrors/hu/Humanizer点击查看免费下载To是 Humanizer 库中面向字符串变换string transformation的统一入口类它通过IStringTransformer抽象将如何变换与变换什么彻底解耦你只需选取内置的LowerCase、SentenceCase、TitleCase、UpperCase四个静态属性或用自定义 Transformer 按任意顺序组合多次变换。阅读本文后你将掌握To类全部公开 API 的签名与语义、四种大小写变换的精确行为差异以及基于文化culture感知的变换底层实现原理并能在自己的项目中直接复用人性化的字符串大小写处理方案。本文以 Humanizer 2.11.10 版本的 API 文档 Humanizer.To.md 为骨架结合 To.cs 源码与 TransformersTests.cs 测试用例展开深度讲解。To类是什么字符串变换的门户To是一个静态类官方文档将其定位为使用 IStringTransformer 进行字符串变换的门户A portal to string transformation using IStringTransformerpublic static class To它本身不直接实现任何变换逻辑而是把四种常见大小写变换分别封装为四个类型化属性属性值全部实现ICulturedStringTransformer接口它提供两个Transform扩展方法负责以链式顺序聚合的方式把多个 Transformer 应用到目标字符串上类定义位于 src/Humanizer/Transformer/To.cs属于 Humanizer 的Transformer命名空间子目录与其配套的还有IStringTransformer.cs、ICulturedStringTransformer.cs及四个具体的变换器实现文件。换句话说To是整个字符串变换子系统对外的唯一大门使用者只与To打交道而具体的ToTitleCase、ToLowerCase、ToUpperCase、ToSentenceCase四个内部类则完全被封装起来。四个内置 Transformer 属性签名、语义与示例To类暴露了四个只读静态属性属性类型均为ICulturedStringTransformer。它们在 To.cs 中通过属性初始化器分别实例化对应的内部实现类public static ICulturedStringTransformer TitleCase { get; } new ToTitleCase(); public static ICulturedStringTransformer LowerCase { get; } new ToLowerCase(); public static ICulturedStringTransformer UpperCase { get; } new ToUpperCase(); public static ICulturedStringTransformer SentenceCase{ get; } new ToSentenceCase();To.LowerCase—— 转全小写Changes the string to lower casepublic static Humanizer.ICulturedStringTransformer LowerCase { get; }示例Sentence casing→sentence casing底层实现见 ToLowerCase.cs它委托给culture.TextInfo.ToLower(input)完成转换因此是**文化感知culture-sensitive**的小写化——土耳其语、阿塞拜疆语等对I/i有特殊映射规则的文化环境下结果会与普通string.ToLower()不同。无文化参数时默认使用CultureInfo.CurrentCulture。To.SentenceCase—— 句首大写Changes the string to sentence casepublic static Humanizer.ICulturedStringTransformer SentenceCase { get; }示例lower case statement→Lower case statement注意区分这里的 Sentence case 语义与 Title Case 不同它只把第一个字符转为大写其余字符全部保持原样。实现见 ToSentenceCase.cs若输入非空且首字符已经是大写则直接原样返回if (char.IsUpper(input[0])) return input;否则仅对首字符执行culture.TextInfo.ToUpper(...)剩余部分通过input.AsSpan(1)原样保留空字符串直接返回空串。因此hello. world? yes! no只会变成Hello. world? yes! no后续句子的首字母并不会被处理测试 TransformersTests.cs 明确验证了这一行为。To.TitleCase—— 标题大小写最复杂Changes string to title casepublic static Humanizer.ICulturedStringTransformer TitleCase { get; }示例INvalid caSEs arE corrected→Invalid Cases Are Corrected这是四个 Transformer 中规则最丰富的一个实现集中在 ToTitleCase.cs核心行为包括按词为单位处理单词匹配正则(\w|[^\u0000-\u007F])?\w*同时支持撇号如Apostrophes且支持非 ASCII 字符全大写缩写/专名保留不动如NASA and the fbi→NASA and the FbiNASA全大写被跳过冠词、连词、介词小写保留内置词表见 ToTitleCase.cs包括a, an, as, at, by, if, in, of, on, or, so, to, up, and, but, for, nor, off, the, via, yet因此the lord of the rings→The Lord of the Ringsthe在句首仍大写of、the在句中保持小写每个词首字母大写、其余字母小写rock-and-roll by night→Rock-and-Roll by Night连字符分隔的单词各自处理空白与标点原样保留 random spaces are HONORED too → Random Spaces Are HONORED Too 文化感知的 ASCII 快速路径对纯 ASCII 输入走不分配额外大缓冲的快速循环对土耳其语tr与阿塞拜疆语az文化使用TextInfo的大小写映射以正确处理i/İ非 ASCII 输入则回退到正则 StringBuilder路径ToTitleCase.cs。To.UpperCase—— 转全大写Changes the string to upper casepublic static Humanizer.ICulturedStringTransformer UpperCase { get; }示例lower case statement→LOWER CASE STATEMENT实现见 ToUpperCase.cs与LowerCase对称委托culture.TextInfo.ToUpper(input)同样文化感知。Transform方法按顺序链式应用多个变换To提供了两个扩展方法这是整个类真正的组合引擎。重载一Transform(this string, params IStringTransformer[])public static string Transform(this string input, params Humanizer.IStringTransformer[] transformers);input待变换的字符串transformers一个或多个IStringTransformer按传入顺序依次应用返回经过全部变换后的新字符串。重载二Transform(this string, CultureInfo, params ICulturedStringTransformer[])public static string Transform(this string input, System.Globalization.CultureInfo culture, params Humanizer.ICulturedStringTransformer[] transformers);额外接受一个CultureInfo culture参数用于驱动所有ICulturedStringTransformer的文化敏感变换transformers的类型必须是ICulturedStringTransformerTo的四个内置属性都满足该约束。顺序即语义变换按给定顺序链式执行两个重载的文档说明都强调了同一句话Transformations are applied in the provided order变换按提供的顺序应用。这一语义在 To.cs 中由Aggregate折叠实现public static string Transform(this string input, params IStringTransformer[] transformers) transformers.Aggregate(input, (current, stringTransformer) stringTransformer.Transform(current)); public static string Transform(this string input, CultureInfo culture, params ICulturedStringTransformer[] transformers) transformers.Aggregate(input, (current, stringTransformer) stringTransformer.Transform(current, culture));即上一个 Transformer 的输出是下一个 Transformer 的输入前一个变换的结果会直接影响后续变换。例如先To.LowerCase再To.SentenceCase与反过来执行得到的结果可能完全不同——这正是链式设计的意义所在也提醒使用者在组合时务必确认执行顺序。接口体系IStringTransformer与ICulturedStringTransformer要理解To的扩展能力必须弄清它依赖的两层接口抽象。IStringTransformerIStringTransformer.csAPI 文档见 Humanizer.IStringTransformer.mdpublic interface IStringTransformer { string Transform(string input); }它定义了能把一个字符串变换成另一个字符串的最小契约。ICulturedStringTransformerICulturedStringTransformer.csAPI 文档见 Humanizer.ICulturedStringTransformer.mdpublic interface ICulturedStringTransformer : IStringTransformer { string Transform(string input, CultureInfo culture); }它继承IStringTransformer并额外增加了带文化参数的Transform(input, culture)重载。四个内置 Transformer 全部实现ICulturedStringTransformer因此它们既能用于无文化的重载一此时默认走CultureInfo.CurrentCulture也能用于显式指定文化的重载二。从源码结构可以推断出这套分层设计的用意无文化的IStringTransformer适合与语言无关的变换如自定义的文本规范化规则而ICulturedStringTransformer则将文化敏感提升为接口级能力让调用方可以在不感知具体实现的情况下统一传入CultureInfo。自定义 Transformer扩展To.Transform的两种方式Transform接受的是接口而非具体类型因此你可以绕过To的四个内置属性注入自己的变换器。由于Transform的聚合逻辑只依赖接口方法自定义 Transformer 能与内置属性无缝混用。using Humanizer; using System.Globalization; // 方式一实现无文化接口用于重载一 public sealed class TrimTransformer : IStringTransformer { public string Transform(string input) input.Trim(); } // 方式二实现文化接口用于重载二 public sealed class CultureAwareDecorator : ICulturedStringTransformer { private readonly IStringTransformer _inner; public CultureAwareDecorator(IStringTransformer inner) _inner inner; public string Transform(string input) _inner.Transform(input); public string Transform(string input, CultureInfo culture) _inner.Transform(input); } // 组合使用先 Trim再 SentenceCase var result lower case statement .Transform(new TrimTransformer(), To.SentenceCase); // Lower case statement测试验证边界行为一览TransformersTests.cs 用Theory数据驱动覆盖了大量边界情况可作为行为契约参考TitleCaseL19-L26单字母词i会大写为I空串返回空串撇号词apostrophes首字母大写全大写词保留冠词/连词/介词在句中保持小写tr-TR文化下istanbul is in turkey→İstanbul İs in Turkeyel-GR文化下对οΣΟΣ执行文化敏感的小写化。LowerCaseL43全大写、大小写混合输入均正确转小写。SentenceCaseL56仅首字符大写、句内其余部分不动换行与标点不影响tr-TR下istanbul. izmir→İstanbul. izmirfr-FR下égoïste. déjà→Égoïste. déjà。UpperCaseL69混合大小写输入全部转大写。如果你需要验证自己项目中的行为是否与 Humanizer 一致可以直接对照这些用例。使用建议与注意事项默认文化不带CultureInfo调用时四个内置 Transformer 及重载一内部均使用CultureInfo.CurrentCulture。在多线程/服务端场景下若依赖特定语言规则建议显式传入文化避免受运行环境线程文化影响顺序敏感Transform是顺序聚合组合多个 Transformer 前先推演一遍中间结果性能考量ToTitleCase对纯 ASCII 输入有快速路径无正则、低分配大量纯英文标题处理性能更优含非 ASCII 字符时回退到正则 StringBuilder路径只读门面To的属性是{ get; }只读属性不要试图替换其值如需不同的变换策略应实现自定义IStringTransformer并交给Transform。小结To类是 Humanizer 字符串变换子系统的统一门面四个文化感知的内置属性覆盖了最常用的四种大小写需求两个Transform重载则提供了顺序化、可组合、可自定义的链式变换能力。配合IStringTransformer/ICulturedStringTransformer接口体系它既能满足开箱即用的场景也保留了充分的扩展空间——这正是 Humanizer 在设计上既人性化又可组合的典型体现。相关参考文件API 文档Humanizer.To.md类实现To.cs接口定义IStringTransformer.cs、ICulturedStringTransformer.cs内部实现ToTitleCase.cs、ToSentenceCase.cs、ToLowerCase.cs、ToUpperCase.cs行为测试TransformersTests.cs赞分享开发工具【免费下载链接】HumanizerHumanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities项目地址https://gitcode.com/gh_mirrors/hu/Humanizer点击查看免费下载相关推荐Humanizer To 类使用 IStringTransformer 与 ICulturedStringTransformer 进行链式字符串大小写变换Humanizer To 类使用 IStringTransformer 与 ICulturedStringTransformer 进行链式字符串大小写变换 导开发工具Humanizer 字符串大小写转换指南全面掌握 CasingExtensions.ApplyCase 与 LetterCasingHumanizer 字符串大小写转换指南全面掌握 CasingExtensions.ApplyCase 与 LetterCasing CasingExtens开发工具Humanizer 字符串大小写转换指南CasingExtensions.ApplyCase 与 LetterCasing 详解Humanizer 字符串大小写转换指南CasingExtensions.ApplyCase 与 LetterCasing 详解 Humanizer 是一个面开发工具上一篇抖音直播录制完全指南从入门到精通的7个实用技巧下一篇高效获取流媒体资源N_m3u8DL-CLI-SimpleG智能解析工具实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考