新闻详情

新闻详情

首页 / 资讯中心 / 详情

Humanizer Plurality 枚举详解:如何在 .NET 文本变形中表达单数、复数与未知复数性

发布时间:2026/9/25 5:26:17来源:尧图网络
Humanizer Plurality 枚举详解:如何在 .NET 文本变形中表达单数、复数与未知复数性
开发工具【免费下载链接】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 公共 API 中的Plurality枚举为切入点系统讲解其三个成员Singular、Plural、CouldBeEither的定义、数值与语义并结合仓库源码Plurality.cs、Vocabulary.cs与测试用例说明 Humanizer 是如何在词形变换复数化/单数化中处理未知复数性这一场景的。读完本文你将掌握该枚举的准确含义、底层调用机制以及在实际代码中如何规避双重复数化或错误单数化。一、Plurality枚举是什么Plurality是 Humanizer 定义在Humanizer命名空间下的一个公共枚举位于 src/Humanizer/Plurality.cs。它的作用正如其 XML 文档注释所述为 Humanizer 提供一个关于某个词是单数、复数还是复数性未知的提示Provides hint for Humanizer as to whether a word is singular, plural or with unknown plurality。从源码看其完整定义如下namespace Humanizer; /// summary /// Provides hint for Humanizer as to whether a word is singular, plural or with unknown plurality /// /summary public enum Plurality { /// summary /// The word is singular /// /summary Singular, /// summary /// The word is plural /// /summary Plural, /// summary /// I am unsure of the plurality /// /summary CouldBeEither }该枚举被纳入 Humanizer 的公共 API 契约在 PublicApiApprovalTest.Approve_Public_Api.DotNet8_0.verified.txt 等 API 验收快照中均有登记说明它是库面向使用者的稳定公共类型之一。三个成员的语义与取值官方 API 文档Humanizer.Plurality.md对每个字段给出了明确说明整理如下成员数值语义说明Plurality.Singular0该词是单数The word is singularPlurality.Plural1该词是复数The word is pluralPlurality.CouldBeEither2无法确定词的复数性I am unsure of the plurality值得注意的是由于枚举默认从0开始按声明顺序递增Singular同时是default(Plurality)的值CouldBeEither是一个三态设计中用于表达不确定性的特殊状态——它既不代表单数也不代表复数而是告诉下游逻辑我不确定请自行判断或采取兜底策略。二、从源码看未知复数性是如何被处理的Plurality枚举本身是一个轻量的状态标记而 Humanizer 真正处理复数性未知的核心逻辑集中在词形变换引擎 Vocabulary.cs 中。在 Vocabulary.cs 的Singularize方法里源码直接以注释点明了这一设计意图// the Plurality is unknown so we should check all possibilities这句注释所在的分支对应Singularize(string? word, bool inputIsKnownToBePlural true, bool skipSimpleWords false)方法中inputIsKnownToBePlural为false的情形当调用者不确定输入词是否为复数时引擎不会直接套用单数化规则而是先尝试按复数规则反向推导ApplyRules(plurals, ...)再与单数化结果相互印证从而避免把本身就正确的单词改错。对称地Pluralize 方法 也提供了bool inputIsKnownToBeSingular true参数当调用者不确定输入词是否为单数时同样会先做一轮按复数规则处理→再按单数规则回推的交叉校验见 Vocabulary.cs防止把已经是复数的词再次复数化。从源码结构可以推断Plurality.CouldBeEither所代表的不确定概念在实际调用链中正是通过inputIsKnownToBeSingular: false/inputIsKnownToBePlural: false这两个布尔参数来落地的。面向使用者的扩展方法入口普通开发者通常不会直接接触Vocabulary而是使用 InflectorExtensions.cs 中的字符串扩展方法public static string? Pluralize(this string? word, bool inputIsKnownToBeSingular true) Vocabularies.Default.Pluralize(word, inputIsKnownToBeSingular); public static string Singularize(this string word, bool inputIsKnownToBePlural true, bool skipSimpleWords false) Vocabularies.Default.Singularize(word, inputIsKnownToBePlural, skipSimpleWords);这两个扩展方法直接透传是否已知复数性的标志位到Vocabulary引擎Vocabularies.Default为默认词汇表实例定义于 Vocabularies.cs。三、实战如何在不确定复数性时安全调用对应Plurality三态中的确定与不确定两类场景代码写法应做如下区分。1. 确定输入是单数 → 默认行为默认参数inputIsKnownToBeSingular: true表示信任输入直接套用复数化规则person.Pluralize(); // people cat.Pluralize(); // cats box.Pluralize(); // boxes man.Pluralize(); // men meter per second.Pluralize(); // meters per second PERSON.Pluralize(); // PEOPLE这些示例正是 InflectorExtensions.cs 文档注释中官方给出的行为。2. 不确定输入是单数还是复数 → 显式声明当输入可能已经是复数时应把标志位设为false相当于告诉引擎复数性未知此时引擎会执行交叉校验以避免双重复数化cats.Pluralize(inputIsKnownToBeSingular: false); // cats避免变成 catses person.Pluralize(inputIsKnownToBeSingular: false); // people单数化方向同理people.Singularize(); // person cats.Singularize(); // cat boxes.Singularize(); // box meters per second.Singularize(); // meter per second person.Singularize(inputIsKnownToBePlural: false); // person避免错误改写其中 person 在inputIsKnownToBePlural: false下保持原样正是 InflectorExtensions.cs 注释强调的avoids incorrect singularization。3. 跳过简单词skipSimpleWordsSingularize还额外提供skipSimpleWords参数用于跳过以 s 结尾的简单词的单数化。测试用例 InflectorTests.cs 给出了典型场景tires.Singularize(skipSimpleWords: true); // tires body.Singularize(skipSimpleWords: true); // bodies规则仍生效 traxxas.Singularize(skipSimpleWords: true); // traxxas四、测试如何验证未知复数性行为Humanizer 的测试套件专门覆盖了与CouldBeEither语义对应的未知复数性/单数性分支见 tests/Humanizer.Tests/InflectorTests.cs[Theory] [ClassData(typeof(PluralTestSource))] public void PluralizeWordsWithUnknownPlurality(string singular, string plural) { Assert.Equal(plural, plural.Pluralize(false)); Assert.Equal(plural, singular.Pluralize(false)); } [Theory] [ClassData(typeof(PluralTestSource))] public void SingularizeWordsWithUnknownSingularity(string singular, string plural) { Assert.Equal(singular, singular.Singularize(false)); Assert.Equal(singular, plural.Singularize(false)); }这两组测试的断言逻辑可以概括为未知复数性无论是把单数还是复数输入传给Pluralize(false)结果都必须是正确的复数形式未知单数性无论是把复数还是单数输入传给Singularize(false)结果都必须是正确的单数形式。也就是说不确定绝不意味着碰运气而是要求引擎在双向校验后仍然给出确定且正确的词形。此外InflectorTests.cs 中的SingularizeDoesNotRewriteUnrelatedWordsEndingInMen测试还验证了在inputIsKnownToBePlural: false下abdomen、specimen、Pacmen等以men结尾但与man/men无关的词不会被误改写——这正是未知复数性分支采用交叉校验而非盲目套规则的原因。五、使用建议与边界说明能用确定就不要用不确定默认参数已覆盖大多数输入为单数/复数的确定场景性能与可预期性最好只有数据来源不可控如用户输入、外部文本时才需要把inputIsKnownToBe*置为false。Plurality枚举与布尔参数的关系从当前仓库源码结构看Plurality枚举在公共 API 层面承担复数性三态的语义定义而词形变换 API 目前通过inputIsKnownToBeSingular/inputIsKnownToBePlural两个布尔参数表达同一概念Plurality.CouldBeEither对应的正是这两个参数为false时的未知状态。不规则词与不可数词Vocabulary内置了不规则词与不可数词表如meter per second在 InflectorTests.cs 中被验证为不可数这些词的未知复数性处理同样走上述交叉校验路径。大小写保持引擎在套用规则后会通过MatchUpperCase恢复输入的大小写风格如PERSON.Pluralize() PEOPLE该行为由 Vocabulary.cs 中的MatchUpperCase(word, result)保证。如果你需要自定义词形规则或注册新的词汇表可进一步阅读 Vocabulary.cs 与 Vocabularies.cs 的源码实现并结合 InflectorTests.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点击查看免费下载相关推荐Hindsight Go 客户端实战从 Retain/Recall/Reflect 到 Nullable 字段与错误处理的完整指南Hindsight Go 客户端实战从 Retain/Recall/Reflect 到 Nullable 字段与错误处理的完整指南 本文基于 Hindsigh开发工具Humanizer 中 GrammaticalGender 枚举详解跨文化控制数字词性与序数词性形的机制Humanizer 中 GrammaticalGender 枚举详解跨文化控制数字词性与序数词性形的机制 本篇围绕 Humanizer 仓库文档 Humani开发工具VictoriaMetrics 故障排查实战指南查询异常、摄入缓慢、慢查询与集群不稳定的系统性定位方法VictoriaMetrics 故障排查实战指南查询异常、摄入缓慢、慢查询与集群不稳定的系统性定位方法 本文基于 VictoriaMetrics 官方故障排查开发工具上一篇vscode-drawio革命性插件让SVG/PNG文件直接支持Draw.io编辑的终极指南下一篇如何从零开始打造你的Magic ePaper电子纸硬件完整DIY指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

Airtest aircv SIFT 图像识别模块解析:特征点匹配、置信度计算与实战使用指南 2026/9/25 6:05:51

Airtest aircv SIFT 图像识别模块解析:特征点匹配、置信度计算与实战使用指南

测试质量保障计算机视觉 【免费下载链接】Airtest UI Automation Framework for Games and Apps 项目地址: https://gitcode.com/gh_mirrors/ai/Airtest 点击查看 免费下载 导读 airtest.aircv.sift 是 Airtest 开源 UI 自动化框架(项目主页&#xff0…

阅读更多 →
机器学习大作业:个贷违约预测AUC优化与三种模型对比 2026/9/25 6:05:51

机器学习大作业:个贷违约预测AUC优化与三种模型对比

简介:这份资源是面向高校机器学习课程大作业场景的个贷违约预测完整项目源码,适合正在完成课程设计、需要参考完整建模流程的本科生与研究生。项目以ROC曲线下面积AUC作为核心评价指标,围绕描述性聚类到软聚类的思路展开,并实现了…

阅读更多 →
无障碍修复人力估算翻译:从工程师人天到团队真实日历的严谨换算 —— vscode-gitlens a11y-remediate 技能实战指南 2026/9/25 6:05:51

无障碍修复人力估算翻译:从工程师人天到团队真实日历的严谨换算 —— vscode-gitlens a11y-remediate 技能实战指南

开发工具版本控制 【免费下载链接】vscode-gitlens Supercharge Git inside VS Code and unlock untapped knowledge within each repository — Visualize code authorship at a glance via Git blame annotations and CodeLens, seamlessly navigate and explore Git reposit…

阅读更多 →
JSP+SqlServer房产中介系统毕设:从环境搭建到答辩避坑全指南 2026/9/25 6:05:51

JSP+SqlServer房产中介系统毕设:从环境搭建到答辩避坑全指南

简介:这是一套面向高校计算机相关专业学生的房产中介系统毕业设计参考资料,采用JSP与SqlServer技术栈实现,适合作为毕设项目、课程设计或工程实训的参考方案。系统涵盖用户注册登录、房屋供求信息录入(出租、出售、求购、求租&…

阅读更多 →
WPScan 如何利用插件 CHANGELOG.md 定位版本:以 HTML Forms 1.3.6 为实例的 ChangeLog 动态查找器深度解析 2026/9/25 6:05:51

WPScan 如何利用插件 CHANGELOG.md 定位版本:以 HTML Forms 1.3.6 为实例的 ChangeLog 动态查找器深度解析

网络安全漏洞扫描渗透测试应用安全CLI 【免费下载链接】wpscan WPScan WordPress security scanner. Written for security professionals and blog maintainers to test the security of their WordPress websites. Contact us via contactwpscan.com 项目地址: ht…

阅读更多 →
工业AR智能巡检方案落地实战:从PPT到现场,避坑指南与代码复现 2026/9/25 6:05:45

工业AR智能巡检方案落地实战:从PPT到现场,避坑指南与代码复现

简介:这份PPT方案面向工业运维工程师、设备管理人员及AR技术方案选型者,系统梳理了以XR技术为核心的智能巡检落地路径,重点解决传统巡检中状态参数无法实时查看、误操作漏检、专业水平参差与应急处理能力不足等痛点。包内共1个pptx文件&#…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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