开发工具【免费下载链接】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点击查看免费下载导读DataUnit是 Humanizer 库中用于描述数据大小data size的单位枚举是字节格式化体系ByteSize、ByteRate与多语言本地化输出之间的核心纽带。本文以 API 参考文档 Humanizer.DataUnit.md 为主体骨架结合当前仓库源码深入讲解该枚举的全部成员、底层换算常量、在ByteSize格式化中的调用链以及它与ByteSizeUnitSystem十进制 SI / 二进制 IEC和本地化 Formatter 的协作关系。读完本文你将清楚理解 Humanizer 如何选单位、如何本地化单位名称以及如何用Format/HumanizeWithUnitSystem等 API 精确控制输出。DataUnit 枚举定义与成员依据 API 文档DataUnit是一个位于Humanizer命名空间下的枚举public enum DataUnit当前仓库中的完整定义位于 src/Humanizer/Localisation/DataUnit.cs。API 文档version-3.0.1列出的基础成员及数值如下成员值说明Bit0比特数据最小单位Byte1字节8 比特Kilobyte2千字节Megabyte3兆字节Gigabyte4吉字节Terabyte5太字节需要说明的是version-3.0.1 的 API 文档只快照了前 6 个成员以当前仓库源码为准DataUnit已经扩展到24 个成员值 023在后文中会逐一展开。前 13 个成员的顺序和值012由测试 ByteSizeUnitSystemTests.cs 通过Enum.GetValuesDataUnit()断言作为二进制兼容性的一部分被固定保留。基础单位Bit、Byte 与 KB~TB前 6 个成员构成了 Humanizer“传统”混合单位体系的主体。它们对应的底层换算常量定义在 ByteSize.cs 中常量值关联的 DataUnitBitsInByte8Bit/ByteBytesInKilobyte1024KilobyteBytesInMegabyte1048576 (1024²)MegabyteBytesInGigabyte1073741824 (1024³)GigabyteBytesInTerabyte1099511627776 (1024⁴)TerabyteBytesInPetabyte1000000000000000 (10¹⁵)PetabyteBytesInExabyte1000000000000000000 (10¹⁸)Exabyte可以推断Humanizer 的传统Legacy体系是“KB~TB 用二进制1024 进制、PB/EB 用十进制1000 进制”的混合模型——这正是ByteSizeUnitSystem.Legacy的语义见 ByteSizeUnitSystem.cs也是测试断言ByteSize.FromBytes(1024).ToString()输出1 KB的原因。每个成员对应的符号与全名常量同样集中在ByteSize中例如BitSymbol b、ByteSymbol B、KilobyteSymbol KB、Kilobyte kilobyte、TerabyteSymbol TB、Terabyte terabyteByteSize.cs。这些常量在ToString的格式化流程中与DataUnit一一对应。扩展成员Petabyte、Exabyte 与 IEC 二进制单位当前源码中的DataUnit在 Terabyte 之后继续扩展成员值说明Petabyte6拍字节传统混合体系中按 10¹⁵ 计Exabyte7艾字节按 10¹⁸ 计Pebibyte8二进制 IEC 拍比字节2⁵⁰Kibibyte9二进制 IEC 千比字节2¹⁰Mebibyte10二进制 IEC 兆比字节2²⁰Gibibyte11二进制 IEC 吉比字节2³⁰Tebibyte12二进制 IEC 太比字节2⁴⁰对应的换算常量在ByteSize中以别名形式存在BytesInKibibyte BytesInKilobyte1024、BytesInMebibyte BytesInMegabyte、BytesInGibibyte BytesInGigabyte、BytesInTebibyte BytesInTerabyte、BytesInPebibyte 1125899906842624ByteSize.cs。符号常量如KibibyteSymbol KiB、PebibyteSymbol PiB以及全名Kibibyte kibibyte等也一并提供。从源码结构看Kibibyte~Tebibyte 这些成员主要服务于“二进制 IEC 单位系统”的显式格式化与解析与BinaryKibibyte~BinaryPebibyte系列值 1923共同支撑ByteSizeUnitSystem.BinaryIec路径。十进制 SI 与二进制 IEC 的显式单位成员为了在显式选择单位系统时避免歧义DataUnit进一步细分出两组“定位精确”的成员DataUnit.cs十进制 SI 组DecimalSi1000 进制成员值对应符号DecimalKilobyte13kB1 000 字节DecimalMegabyte14MB10⁶ 字节DecimalGigabyte15GB10⁹ 字节DecimalTerabyte16TB10¹² 字节DecimalPetabyte17PB10¹⁵ 字节DecimalExabyte18EB10¹⁸ 字节换算常量ByteSize.csBytesInDecimalKilobyte 1000、BytesInDecimalMegabyte 1000000依此类推。二进制 IEC 组BinaryIec1024 进制成员值对应符号BinaryKibibyte19KiB2¹⁰ 字节BinaryMebibyte20MiB2²⁰ 字节BinaryGibibyte21GiB2³⁰ 字节BinaryTebibyte22TiB2⁴⁰ 字节BinaryPebibyte23PiB2⁵⁰ 字节这两组“显式单位”成员被 ByteSizeExtensions.cs 中的DecimalCompositeUnits/BinaryCompositeUnits复合单位表引用用于HumanizeCompositeWithUnitSystem等按系统输出多段组合的格式化场景。DataUnit 在 ByteSize 格式化中的核心调用链DataUnit并非孤立枚举它是ByteSize字符串化的“单位选择 单位命名”枢纽。核心流程如下ByteSize.cs自动选单位LargestWholeNumberValue/GetLargestWholeNumberSymbol/GetLargestWholeNumberFullWord按 Exabyte → Petabyte → … → Byte → Bit 的顺序取“绝对值 ≥ 1”的最大单位。例如FromBytes(1024)时Kilobytes 1因此命中DataUnit.Kilobyte。符号或全词命中单位后调用cultureFormatter.DataUnitHumanize(dataUnit, count, toSymbol)。toSymbol: true输出缩写如KBfalse输出全词如kilobyte。默认输出ToString()使用0.##数字格式拼出类似1.5 KB的字符串ToFullWords()则输出1.5 kilobytesByteSize.cs。显式指定单位Format(ByteSizeUnitSystem, format, provider)与FormatFullWords(...)允许按单位系统明确指定格式串中的单位 token如0 b、0.00 KB由FormatWithUnitSystem完成 token 匹配、数值转换与单位文本替换ByteSize.cs。ByteSizeExtensions还提供了一整套与单位对应的工厂扩展如1024.Bytes()、1.Kilobytes()、FromMebibytes(...)、FromDecimalMegabytes(...)等ByteSizeExtensions.cs它们最终都通过DataUnit关联的换算常量构造ByteSize。本地化DataUnitHumanize 与多语言单位词形DataUnit的另一个关键角色是驱动多语言输出。IFormatter接口定义了核心方法IFormatter.csstring DataUnitHumanize(DataUnit dataUnit, double count, bool toSymbol true);DefaultFormatter的实现DefaultFormatter.cs遵循“短语表优先、英文回退兜底”的策略首先尝试从当前文化的生成短语表Locale 短语表如LocalePhraseTable中查找该DataUnit的本地化词形对于Petabyte、Exabyte、Kibibyte~Tebibyte等非英文文化未生成短语的单位回退到英文形式EnglishFallback.DataUnitHumanize若短语表完全缺失则抛出InvalidOperationException提示“缺少该文化下该单位的生成短语”。在显式单位系统路径中还提供了DataUnitHumanizeExactDefaultFormatter.cs它会结合本地化词形变化复数分类、GrammaticalNumber按精确数量输出正确的词形例如斯洛文尼亚语中3 kilobajti、阿拉伯语中11 ميجابايت。这些跨语言断言可以在 ByteSizeUnitSystemLocaleTests.cs 与 ByteSizeUnitSystemLocaleTheoryData.cs 中查证。与 ByteSizeUnitSystem 的协作关系DataUnit的显式成员Decimal*、Binary*与ByteSizeUnitSystem三值枚举一一呼应ByteSizeUnitSystem.csLegacy0沿用传统混合单位KB~TB 二进制、PB/EB 十进制Format直接委托给ToStringDecimalSi1每级单位相差 1000 倍使用DecimalKilobyte~DecimalExabyteBinaryIec2每级单位相差 1024 倍使用BinaryKibibyte~BinaryPebibyte。在ByteSizeUnitSystem.DecimalSi/BinaryIec下SI/IEC 前缀单位 token 的匹配不区分大小写而b与B仍保持大小写敏感输出时使用规范符号大小写。HumanizeWithUnitSystem、ParseWithUnitSystem、HumanizeCompositeWithUnitSystem等 API 都以此为基准可参考 ByteRate.cs 与 ByteSizeExtensions.cs 的实现以及ByteRate的速率输出示例 Program.cs。总结DataUnit是 Humanizer 数据大小功能中“单位语义”的唯一权威来源它以Bit0、Byte1起步经Kilobyte~Terabyte的传统混合单位扩展到Petabyte、Exabyte与 IEC 的Kibibyte~Tebibyte再到服务于显式单位系统的Decimal*与Binary*系列共 24 个成员。它既驱动ByteSize的自动单位选择与符号输出也通过IFormatter.DataUnitHumanize将单位名称本地化为数十种语言还能配合ByteSizeUnitSystem实现十进制 SI 与二进制 IEC 的精确格式化与解析。理解这张枚举就等于掌握了 Humanizer 数据大小格式化的全部语义底座。赞分享开发工具【免费下载链接】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 DataUnit 枚举完全指南数据大小单位模型与字节格式化体系Humanizer DataUnit 枚举完全指南数据大小单位模型与字节格式化体系 本文基于 website/versioned_docs/version 2开发工具Humanizer DataUnit 枚举详解数据单位如何驱动字节大小格式化与本地化Humanizer DataUnit 枚举详解数据单位如何驱动字节大小格式化与本地化 Humanizer.DataUnit 源码位于 src/Humaniz开发工具Humanizer 数据单位枚举 DataUnit 详解从 Bit 到 Exabyte 的单位体系与数据大小本地化格式化Humanizer 数据单位枚举 DataUnit 详解从 Bit 到 Exabyte 的单位体系与数据大小本地化格式化 导读 Humanizer.Local开发工具上一篇Bounded Context Canvas核心组件详解战略分类、领域角色与通信模式下一篇ExusData与Git LFS高效管理大型机器人数据集的终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考