ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Humanizer CasingExtensions 使用指南:用 ApplyCase 轻松统一字符串大小写风格

Humanizer CasingExtensions 使用指南:用 ApplyCase 轻松统一字符串大小写风格 开发工具【免费下载链接】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 的CasingExtensions是一个只含一个扩展方法的静态类核心职责是让开发者通过ApplyCase(this string, LetterCasing)一行调用即可为任意字符串套用 Title标题、LowerCase全小写、AllCaps全大写、Sentence句首大写四种大小写风格。本文以 Humanizer.CasingExtensions.md 为主线结合src/Humanizer的源码实现与tests/Humanizer.Tests的测试用例完整讲解该 API 的签名、四种枚举语义、内部转换链路、异常行为与在项目中的实际调用场景读完即可在 .NET 项目中直接落地使用。一、API 概览一个方法、四种风格CasingExtensions定义在src/Humanizer/CasingExtensions.cs其官方文档定位是ApplyCase method to allow changing the case of a sentence easily——即一个用于轻松改变句子大小写的方法。类本身是一个静态扩展类public static class CasingExtensions方法签名如下来自 src/Humanizer/CasingExtensions.cs 与文档public static string ApplyCase(this string input, Humanizer.LetterCasing casing);参数类型说明inputSystem.String要变换的字符串必须非 null否则会引发运行时异常casingLetterCasing期望应用的大小写风格取值来自 LetterCasing 枚举返回值为System.String即应用指定大小写后的新字符串。由于它是扩展方法调用时可省略this直接写成some string.ApplyCase(LetterCasing.Title)。该 API 是 Humanizer 公共 API 的一部分已纳入 PublicApiApprovalTest.Approve_Public_Api.DotNet8_0.verified.txt 等多目标框架的 API 审批清单其签名在 .NET 8 / .NET 10 / .NET 11 / .NET Framework 4.8 下保持一致。二、LetterCasing 枚举的四种语义LetterCasing定义于 src/Humanizer/LetterCasing.cs注释中给出了直观的语义说明枚举值行为示例Title每个单词首字母大写SomeString - Some StringAllCaps全部字母大写SomeString - SOME STRINGLowerCase全部字母小写SomeString - some stringSentence仅首字母大写其余保持不变SomeString - Some string文档对四种风格的输出示例为some string.ApplyCase(LetterCasing.Title) Some String SOME STRING.ApplyCase(LetterCasing.LowerCase) some string some string.ApplyCase(LetterCasing.AllCaps) SOME STRING some string.ApplyCase(LetterCasing.Sentence) Some string注意Sentence的精确语义源码注释是First character uppercased, remainder unchanged——只把首字符转大写、其余字符原样保留与Title会把每个词首字母大写有本质区别。这一细节在ToSentenceCase的实现中体现得很清楚见下文。三、源码纵深ApplyCase 的底层转换链路ApplyCase本身只是一个switch分发器src/Humanizer/CasingExtensions.cspublic static string ApplyCase(this string input, LetterCasing casing) casing switch { LetterCasing.Title input.Transform(To.TitleCase), LetterCasing.LowerCase input.Transform(To.LowerCase), LetterCasing.AllCaps input.Transform(To.UpperCase), LetterCasing.Sentence input.Transform(To.SentenceCase), _ throw new ArgumentOutOfRangeException(nameof(casing)) };从源码结构看四种风格分别路由到 Transformer/To.cs 中暴露的四个ICulturedStringTransformer单例To.TitleCase→ToTitleCase实例To.LowerCase→ToLowerCase实例To.UpperCase→ToUpperCase实例To.SentenceCase→ToSentenceCase实例To.Transform扩展方法负责按顺序聚合应用转换器src/Humanizer/Transformer/To.cspublic static string Transform(this string input, params IStringTransformer[] transformers) transformers.Aggregate(input, (current, stringTransformer) stringTransformer.Transform(current));此外To还提供带CultureInfo的重载Transform(this string input, CultureInfo culture, params ICulturedStringTransformer[] transformers)src/Humanizer/Transformer/To.cs说明这些转换器支持按文化区域执行大小写转换。Title不是简单的首字母大写ToTitleCasesrc/Humanizer/Transformer/ToTitleCase.cs是最复杂的实现值得展开文化敏感Transform(string)默认使用CultureInfo.CurrentCulture对tr土耳其语与az阿塞拜疆语这两种文化区域ASCII 大小写转换也会走TextInfo的文化敏感路径UsesCultureSensitiveAsciiCasing其余文化使用纯 ASCII 位移计算兼顾性能与正确性。ASCII 快速路径当输入全部为 ASCII 时使用手写的逐字扫描逻辑TryTransformAscii完成单词切分与改写一旦遇到非 ASCII 字符则回退到正则路径。正则路径使用词模式(\w|[^\u0000-\u007F])?\w*切分单词.NET 7 使用[GeneratedRegex]生成正则旧框架使用RegexOptions.Compiled预编译随后逐词处理。保留全大写词如果某个词整体已是大写AllCapitals/AllAsciiCapitals则保持不变——这是 Title 风格的贴心之处例如测试用例honors UPPER case - Honors UPPER Case验证了这一点。小词规则冠词、连词、介词a/an/as/at/by/if/in/of/on/or/so/to/up/and/but/for/nor/off/the/via/yet在非句首位置保持小写避免出现 The Quick Brown Fox And The... 这类不地道的标题。LowerCase / AllCaps委托给 TextInfoToLowerCasesrc/Humanizer/Transformer/ToLowerCase.cs与ToUpperCasesrc/Humanizer/Transformer/ToUpperCase.cs实现极为精简直接调用culture.TextInfo.ToLower(input)/culture.TextInfo.ToUpper(input)默认使用当前文化。Sentence只动首字符ToSentenceCasesrc/Humanizer/Transformer/ToSentenceCase.cs的语义是如果首字符已经是大写则原样返回否则仅将首字符转大写并拼接其余部分StringHumanizeExtensions.Concat(culture.TextInfo.ToUpper(input[0]), input.AsSpan(1))。这正是文档所述First letter capitalized, rest lowercase的精确实现但它并不强制把其余字符小写化——与ToLowerCase的行为有微妙差异使用时需注意。四、异常行为非法枚举值抛出 ArgumentOutOfRangeException文档明确列出唯一的异常类型ArgumentOutOfRangeException当传入无效的LetterCasing值时抛出。这是switch表达式默认分支_ throw new ArgumentOutOfRangeException(nameof(casing))的直接结果src/Humanizer/CasingExtensions.cs。仓库测试 CoverageGapTests.cs 用(LetterCasing)42这一不存在的枚举值验证了该异常行为Assert.ThrowsArgumentOutOfRangeException(() hello.ApplyCase((LetterCasing)42));另外文档要求input必须非 null。若传入 nullTo系列转换器内部的TextInfo.ToUpper/ToLower、正则匹配或索引操作都会抛出异常因此调用方应自行保证入参非空。五、测试用例与行为验证tests/Humanizer.Tests/CasingTests.cs为ApplyCase的四种模式提供了系统的[Theory]测试数据可直接作为行为参考Titlelower case statement - Lower Case Statement、Sentence casing - Sentence Casing、honors UPPER case - Honors UPPER Case、Title Case - Title Case保持原样、title case (with parenthesis) - Title Case (With Parenthesis)括号内的词也参与标题化。LowerCase任何风格输入统一转为全小写如No honor for UPPER case - no honor for upper case。Sentence仅首字符大写、其余保持原样如honors UPPER case - Honors UPPER case注意 UPPER 未被降为小写这正是 Sentence 与 Title 的差异所在。AllCaps统一全大写如Sentence casing - SENTENCE CASING。这些用例同时被 CasingTests.cs 完整覆盖开发者可在本地dotnet test验证。六、在项目中的实际调用场景从源码检索看ApplyCase是 Humanizer 内部多个扩展方法的最后一公里大小写处理器典型场景包括枚举人性化EnumHumanizeExtensions.cs当调用Enum.Humanize(LetterCasing.Title)之类的带大小写参数重载时底层把枚举拆分后的文本交给ApplyCase统一套用目标风格位标志flag枚举也会逐项应用。字符串人性化StringHumanizeExtensions.csHumanize系列扩展在完成去下划线、拆分驼峰等处理后最终用ApplyCase(casing)应用请求的大小写风格例如将PascalCaseInputStringIsTooLong变成Pascal case input string is too long或指定 Title 风格。词形还原标题化InflectorExtensions.csTitleize之类的场景先将文本处理为空格分隔再调用ApplyCase(LetterCasing.Title)得到标准标题格式。因此理解ApplyCase的四种风格语义等于理解了 Humanizer 所有接受LetterCasing参数的扩展方法Humanize、Titleize、枚举人性化等的输出行为。七、实操速查与注意事项以下为可直接复制到项目中的最小用法需引入Humanizer命名空间using Humanizer; string title some string.ApplyCase(LetterCasing.Title); // Some String string lower SOME STRING.ApplyCase(LetterCasing.LowerCase); // some string string caps some string.ApplyCase(LetterCasing.AllCaps); // SOME STRING string sentence some string.ApplyCase(LetterCasing.Sentence); // Some string实践要点总结Title会保留已全大写的缩写词并把非句首的冠词/连词/介词小写化适合生成英文标题、UI 文案与报表表头Sentence只改首字母、不动其余字符适合处理句首位置的展示文本但不要指望它清理句中残留的大写LowerCase/AllCaps为全量转换默认跟随CultureInfo.CurrentCulture在土耳其语等文化环境下行为会随TextInfo变化传入超出枚举范围的整数值会抛出ArgumentOutOfRangeException入参为 null 亦不受支持该方法返回新字符串不修改原字符串符合 .NET 字符串不可变约定。如果需要更细粒度的字符串变换例如同时应用多个转换器、指定文化区域可绕过ApplyCase直接使用 Transformer/To.cs 暴露的To.TitleCase、To.SentenceCase等转换器及Transform重载实现与ApplyCase一致、但更灵活的管线化处理。赞分享开发工具【免费下载链接】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 CasingExtensions 完全指南用 ApplyCase 统一控制字符串大小写风格Humanizer CasingExtensions 完全指南用 ApplyCase 统一控制字符串大小写风格 Humanizer 的 CasingExten开发工具Humanizer CasingExtensions.ApplyCase 指南用 LetterCasing 一键切换字符串大小写风格Humanizer CasingExtensions.ApplyCase 指南用 LetterCasing 一键切换字符串大小写风格 本篇技术指南围绕 Hum开发工具Humanizer 字符串大小写转换指南LetterCasing 枚举与 ApplyCase 深入解析Humanizer 字符串大小写转换指南LetterCasing 枚举与 ApplyCase 深入解析 LetterCasing 是 .NET 字符串处理库开发工具上一篇ndb与Amazon Aurora集成云数据库调试技巧下一篇终极指南如何从年月日快速计算周数 - C20 chrono库的强大日期计算功能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表