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),仅供参考

相关新闻

基于STM32的实验室消防预警系统:原理图、仿真与代码全开源

基于STM32的实验室消防预警系统:原理图、仿真与代码全开源

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 3:51:02 阅读更多 →
深入理解itk::Image:医学图像处理核心数据结构与几何变换

深入理解itk::Image:医学图像处理核心数据结构与几何变换

1. 为什么说 itk::Image 是医学图像处理的地基做医学影像处理的人,几乎天天和 ITK 打交道。无论是 DICOM 转 NIfTI、图像配准、分割还是三维重建,底层的数据结构几乎都是 itk::Image。我最早接触 ITK 时,第一反应是“这不就是一个带维度的数组…

2026/9/25 3:51:02 阅读更多 →
Swagger Codegen 生成模型文档与源码解读:AdditionalPropertiesClass 与 additionalProperties 映射机制

Swagger Codegen 生成模型文档与源码解读:AdditionalPropertiesClass 与 additionalProperties 映射机制

开发工具代码生成API设计 【免费下载链接】swagger-codegen swagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition. 项目地址: http…

2026/9/25 3:51:02 阅读更多 →

最新新闻

深入理解 Sinon 的 `spyCall.firstArg`:读取单次调用首个参数的正确姿势

深入理解 Sinon 的 `spyCall.firstArg`:读取单次调用首个参数的正确姿势

测试开发工具 【免费下载链接】sinon Test spies, stubs and mocks for JavaScript. 项目地址: https://gitcode.com/gh_mirrors/si/sinon 点击查看 免费下载 spyCall.firstArg 是 Sinon 中 spy call 对象的一个核心只读属性,用于获取某一次函数调用传入…

2026/9/25 4:57:52 阅读更多 →
腾讯云WorkBuddy Enterprise企业级AI Agent平台架构与实操指南

腾讯云WorkBuddy Enterprise企业级AI Agent平台架构与实操指南

1. 从零理解 WorkBuddy Enterprise 的定位与核心价值1.1 这个平台到底解决什么问题WorkBuddy Enterprise 是腾讯云推出的一套企业级 AI 平台与 Agent 生态产品。说白了,它要解决的核心问题是:企业想用 AI,但不知道怎么把 AI 能力安全、可控、…

2026/9/25 4:57:52 阅读更多 →
Endnote在Word中消失?COM加载项排查与修复指南

Endnote在Word中消失?COM加载项排查与修复指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 4:57:52 阅读更多 →
Java图书管理系统SWT实战:从环境搭建到避坑指南

Java图书管理系统SWT实战:从环境搭建到避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 4:57:52 阅读更多 →
GDS版图从入门到精通:层次结构、生成流程与-uniquifycellnames避坑指南

GDS版图从入门到精通:层次结构、生成流程与-uniquifycellnames避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 4:57:52 阅读更多 →
Navicat免安装版深度解析:依赖库、配置与MySQL连接排查指南

Navicat免安装版深度解析:依赖库、配置与MySQL连接排查指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 4:56:51 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →