ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Humanizer 的 LetterCasing 枚举详解:Title、AllCaps、LowerCase 与 Sentence 四种字符串大小写转换

Humanizer 的 LetterCasing 枚举详解:Title、AllCaps、LowerCase 与 Sentence 四种字符串大小写转换 开发工具【免费下载链接】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点击查看免费下载导读LetterCasing是 Humanizer 中用于指定字符串输出大小写风格的枚举定义了Title、AllCaps、LowerCase、Sentence四种取值配合扩展方法ApplyCase使用。本文以 Humanizer.LetterCasing.md 为核心骨架结合仓库源码与测试用例深入讲解每一个枚举值的行为差异、底层转换器实现原理以及LetterCasing在Humanize、枚举格式化等场景中的组合用法帮助你在 .NET 项目中精确控制字符串、枚举与标识符的可读性输出。LetterCasing 枚举四种大小写风格LetterCasing定义在 src/Humanizer/LetterCasing.cs 中注释明确说明它是 Options for specifying the desired letter casing for the output string用于指定输出字符串期望的大小写风格。枚举共四个成员底层数值从 0 到 3官方文档给出的转换示例如下枚举值数值输入示例输出示例行为说明Title0SomeStringSome String每个单词首字母大写AllCaps1SomeStringSOME STRING全部字母大写LowerCase2SomeStringsome string全部字母小写Sentence3SomeStringSome string仅首字符大写其余保持不变public enum LetterCasing { Title, AllCaps, LowerCase, Sentence, }需要注意枚举本身只描述期望的大小写风格它并不知道输入字符串中是否包含空格——实际的分词、去下划线/连字符等工作由调用它的转换器与扩展方法完成。例如文档示例中SomeString - Some String之所以能产生空格是因为ApplyCase(LetterCasing.Title)内部结合了 Humanizer 的字符串 Humanize 能力这一点在下一节展开。ApplyCase统一入口扩展方法LetterCasing的核心消费者是 src/Humanizer/CasingExtensions.cs 中定义的扩展方法ApplyCase它把枚举值分发到 Humanizer 的转换器transformer体系public 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)) };从源码可以提炼出三个关键事实四种枚举值一一对应四个转换器Title→To.TitleCaseLowerCase→To.LowerCaseAllCaps→To.UpperCaseSentence→To.SentenceCase非法枚举值会抛出异常switch的_分支抛出ArgumentOutOfRangeException因此传入未定义的枚举值如(LetterCasing)99会立即失败而不是静默返回原字符串转换器全部实现了ICulturedStringTransformer这意味着大小写转换是文化敏感的culture-sensitive使用当前线程的CultureInfo执行TextInfo.ToUpper/ToLower而不是简单的 ASCII 字符运算。// 典型调用 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底层原理To 门户与四种转换器的实现To字符串转换的统一门户src/Humanizer/Transformer/To.cs 是一个静态门户类公开了四个ICulturedStringTransformer单例TitleCase、LowerCase、UpperCase、SentenceCase。它同时提供两个Transform重载无文化参数版本使用CultureInfo.CurrentCulture带文化参数版本允许显式传入CultureInfo便于在特定区域设置下执行转换。Transform本身支持链式传递多个转换器按传入顺序依次应用。ApplyCase每次只使用一个转换器但你在其他场景下可以自由组合例如input.Transform(To.LowerCase, To.TitleCase)。ToTitleCase最复杂的转换器Title枚举值背后是 src/Humanizer/Transformer/ToTitleCase.cs它是四种转换器中逻辑最复杂的核心行为如下ASCII 快速路径对纯 ASCII 输入走逐字符扫描的高效路径一旦遇到非 ASCII 字符 \u007F则回退到正则方案正则兜底路径使用单词模式(\w|[^\u0000-\u007F])?\w*匹配单词支持撇号如dont每个单词首字母大写、其余字母小写全大写单词保持原样AllCapitals/AllAsciiCapitals检查命中时跳过转换因此honors UPPER case中的UPPER不会被改写成Upper小词冠词/连词/介词不强制大写单词索引大于 0 且命中IsArticleOrConjunctionOrPreposition列表a、an、as、at、by、if、in、of、on、or、so、to、up、and、but、for、nor、off、the、via、yet时保持原样这是它区别于 .NET 内置TextInfo.ToTitleCase的显著增强土耳其语/阿塞拜疆语特殊处理UsesCultureSensitiveAsciiCasing对以tr、az开头的文化启用文化敏感的大小写映射正确处理I/ı/İ等字符。ToLowerCase 与 ToUpperCase直接委托 TextInfoLowerCase与AllCaps的实现最直接见 src/Humanizer/Transformer/ToLowerCase.cs 与 src/Humanizer/Transformer/ToUpperCase.cs二者分别调用culture.TextInfo.ToLower(input)与culture.TextInfo.ToUpper(input)行为等同于 .NET 标准的文化感知大小写转换。ToSentenceCase只动第一个字符Sentence风格由 src/Humanizer/Transformer/ToSentenceCase.cs 实现逻辑很短但值得注意若输入第一个字符已是char.IsUpper直接原样返回不会重复转换否则仅将首字符通过culture.TextInfo.ToUpper大写其余字符完全保持原样——注意这与很多语言库的 sentence case其余字母转小写不同honors UPPER case转换后是Honors UPPER case而不是Honors upper case。LetterCasing 在 Humanizer 其他 API 中的组合使用LetterCasing的价值远不止ApplyCase本身它在 Humanizer 的多个高频扩展方法中作为可选参数出现让可读化与大小写风格一步到位。字符串 Humanize LetterCasingsrc/Humanizer/StringHumanizeExtensions.cs 提供重载先 Humanize 再应用大小写public static string Humanize(this string input, LetterCasing casing) input .Humanize() .ApplyCase(casing);文档示例与注释中的行为PascalCaseInputString.Humanize(LetterCasing.AllCaps) // PASCAL CASE INPUT STRING PascalCaseInputString.Humanize(LetterCasing.LowerCase) // pascal case input string PascalCaseInputString.Humanize(LetterCasing.Title) // Pascal Case Input String注意Humanize 阶段负责把PascalCaseInputString拆分成带空格的词组这也是文档中SomeString - Some String产生空格的原因ApplyCase阶段负责调整大小写两阶段各司其职。枚举 Humanize LetterCasingsrc/Humanizer/EnumHumanizeExtensions.cs 同样支持大小写参数官方注释给出的示例UserType.AnonymousUser.Humanize(LetterCasing.AllCaps) // ANONYMOUS USER UserType.AnonymousUser.Humanize(LetterCasing.Title) // Anonymous User UserType.AnonymousUser.Humanize(LetterCasing.LowerCase) // anonymous user这对于在 UI 上展示枚举显示名、生成报表列头等场景非常实用。此外枚举转换时还会自动识别并展开缩写如UserType.AnonymousUser中的User与AnonymousUser边界与LetterCasing叠加后即可获得规范的展示文本。其他间接使用者src/Humanizer/InflectorExtensions.cs 在去复数化的某些路径中调用humanized.ApplyCase(LetterCasing.Title)保证处理结果始终是 Title 风格。测试验证CasingTests 中的行为契约Humanizer 为ApplyCase的四种风格各准备了一组理论测试Theory定义在 tests/Humanizer.Tests/CasingTests.cs它们是最权威的行为契约风格输入期望输出Titlelower case statementLower Case StatementTitleSentence casingSentence CasingTitlehonors UPPER caseHonors UPPER CaseTitletitle case (with parenthesis)Title Case (With Parenthesis)LowerCaseNo honor for UPPER caseno honor for upper caseSentencelower case statementLower case statementSentencehonors UPPER caseHonors UPPER caseAllCapslower case statementLOWER CASE STATEMENT这些用例验证了前文提到的关键细节Title保留全大写单词UPPER不变、Sentence保留首字符之后的所有大小写UPPER不变、括号中的单词同样参与 Title 转换。你在项目中若对某个边界行为存疑可以直接以这份测试文件为准。使用建议与注意事项枚举值与 Transformer 一一对应需要自定义大小写策略如中文场景或特殊缩写表时可以直接实现ICulturedStringTransformer并通过To.Transform链式组合而不必拘泥于LetterCasing的四种固定风格文化敏感性LowerCase/AllCaps直接走TextInfoTitleCase对土耳其语tr、阿塞拜疆语az做了专门适配。处理用户界面文本时应配合正确的线程文化或显式传入CultureInfoSentence 并非全句小写它只大写首字符其余字符原样保留这与首字母大写、其余小写的常见直觉不同选用前请确认语义非法枚举值会抛ArgumentOutOfRangeException如果LetterCasing来自外部输入如配置字符串反序列化建议先做取值校验避免运行时异常。小结LetterCasing是 Humanizer 中小巧但关键的枚举四个成员分别映射到TitleCase、LowerCase、UpperCase、SentenceCase四个文化敏感的转换器通过ApplyCase统一分发并被Humanize字符串与枚举等高频 API 复用。理解它的取值语义与底层实现能让你在生成 UI 文案、格式化枚举与标识符时精确掌控输出的大小写风格。延伸阅读枚举定义src/Humanizer/LetterCasing.cs核心入口方法src/Humanizer/CasingExtensions.cs转换器门户与四种实现src/Humanizer/Transformer/To.cs、ToTitleCase.cs、ToLowerCase.cs、ToUpperCase.cs、ToSentenceCase.cs组合使用示例src/Humanizer/StringHumanizeExtensions.cs、src/Humanizer/EnumHumanizeExtensions.cs行为契约测试tests/Humanizer.Tests/CasingTests.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 字符串大小写转换详解ApplyCase 方法与 LetterCasing 枚举全解析Humanizer 字符串大小写转换详解ApplyCase 方法与 LetterCasing 枚举全解析 本文围绕 Humanizer 中 CasingExt开发工具Humanizer LetterCasing 枚举详解四类大小写转换模式与 ApplyCase 实战Humanizer LetterCasing 枚举详解四类大小写转换模式与 ApplyCase 实战 导读 LetterCasing 是 Humanizer开发工具Humanizer 字符串大小写转换指南CasingExtensions.ApplyCase 与 LetterCasing 详解Humanizer 字符串大小写转换指南CasingExtensions.ApplyCase 与 LetterCasing 详解 Humanizer 是一个面开发工具上一篇KOReader 样式微调指南5步定制阅读排版下一篇深入理解 passport-jwt 策略JWT 提取与验证完整解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表