新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/9/26 18:40:19来源:尧图网络
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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

二重积分积分限怎么定?画图+穿线法全流程拆解 2026/9/26 18:40:14

二重积分积分限怎么定?画图+穿线法全流程拆解

拿到二重积分的题目,很多同学第一反应是背公式:直角坐标怎么写、极坐标怎么写、先对谁积分、后对谁积分。可一到做题就露馅,尤其是给一个具体的积分区域,比如由抛物线和直线围出来的那种,完全不知道上下限该从哪里抄&a…

阅读更多 →
变压器热仿真实战:COMSOL多物理场耦合建模与关键设置 2026/9/26 18:40:14

变压器热仿真实战:COMSOL多物理场耦合建模与关键设置

变压器热仿真这件事,我以前觉得就是个“完成任务”的活儿,直到真正用COMSOL把电磁场、温度场、流体场耦合在一起跑通一个油浸式变压器模型之后,才发现这里面的门道远比想象中多。单纯靠经验公式估算热点温升,已经越来越难满足现在…

阅读更多 →
Eclipse安卓开发环境搭建全攻略:从JDK到模拟器跑通第一个App 2026/9/26 18:40:14

Eclipse安卓开发环境搭建全攻略:从JDK到模拟器跑通第一个App

说句实话,这几年我被人问得最多的开发环境问题,不是Android Studio怎么配,而是“Eclipse还能不能做安卓开发”。我的回答一直很干脆:能做,而且版本配对了,整个流程能跑得很顺畅。我本人从2012年开始用Eclip…

阅读更多 →
UI专用小模型:AI生成界面的性价比正解 2026/9/26 18:40:14

UI专用小模型:AI生成界面的性价比正解

开篇先说一句得罪人的话:很多团队现在一提到AI生成UI,第一反应就是把某个超大规模通用模型接进来,写一堆描述让它吐前端代码。这路子不是不行,但真正做过几个商业项目之后你会发现,它又贵又慢,而且输出风格…

阅读更多 →
论文AI率太高怎么降?三天实战改稿方法论 2026/9/26 18:40:01

论文AI率太高怎么降?三天实战改稿方法论

导师把论文稿退回来,只留下一句:AI率太高,再改改。这句话的杀伤力有多大,经历过的人都知道:改稿期限就在眼前,导师不给你具体标注,系统里那个“AI率”数字却像审判书一样挂在那儿,你…

阅读更多 →
GitHub API限速机制与TPM实战避坑指南 2026/9/26 18:40:01

GitHub API限速机制与TPM实战避坑指南

1. 这不是报错,是GitHub在给你发“限速警告信”你刚敲下curl -H "Authorization: Bearer ghp_..." https://api.github.com/user,终端却冷不丁甩出一行红字:Rate limit exceeded。这不是程序崩溃,也不是网络断了&#x…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉