admin管理员组

文章数量:1030979

SmartFormat:轻量级文本模板库,轻松替代 string.Format

推荐一个 C# 编写的轻量级文本模板库,可以作为 string.Format 的替代品。

01

项目简介

SmartFormat不仅继承了 string.Format 的功能,还扩展了更多高级特性,例如命名占位符、列表格式化、本地化支持、复数化等。SmartFormat 提供了高性能、低内存占用的运行时格式化能力。

支持的目标框架

  • .Net Framework 4.6.2 及更高版本
  • .Net 标准 2.0、.Net 标准 2.1
  • .Net 6.0 或 .Net 8.0

02

使用方法

1、简单的例子

代码语言:javascript代码运行次数:0运行复制
var data = new { Library = "SmartFormat"};
_ = Smart.Format("Composed with {Library}.", data); 
// 结果: "Composed with SmartFormat."

2、类似于 string.Format 的风格的例子

代码语言:javascript代码运行次数:0运行复制
var stringFormat = string.Format("{0} {0:N2} {1:yyyy-MM-dd}", 5, new DateTime(1900, 12, 31));
var smartFormat = Smart.Format("{0} {0:N2} {1:yyyy-MM-dd}", 5, new DateTime(1900, 12, 31));
// 结果: (stringFormat == smartFormat) == true

3、格式化一个 IList 的例子

代码语言:javascript代码运行次数:0运行复制
var data = new [] {1, 2, 3, 4, 5};
_ = Smart.Format("{0:list:N2|,|, and }.", (object) data);
// 结果: "1.00, 2.00, 3.00, 4.00, and 5.00."

4、根据值选择输出字符串的例子

代码语言:javascript代码运行次数:0运行复制
var data = new[] { new { Name = "John", Gender = 0 }, new { Name = "Mary", Gender = 1 } };
_ = Smart.Format("{Name} commented on {Gender:choose:his|her} photo", data[1]);
// 结果: "Mary commented on her photo"

5、稍微复杂的例子:格式化器可以嵌套。在这个例子中,我们有一个带有嵌套 ListFormatter(其本身又包含一个 DefaultFormatter)的 ListFormatter。

代码语言:javascript代码运行次数:0运行复制
var data = new List<int[]> {
    new[] { 1, 2, 3 },
    new[] { 4, 5, 6 },
    new[] { 7, 8, 9 }
};
_ = Smart.Format("{0:list:Elements\\: {:list:{:000}|,|, }|\n|\n}", data);
/* 结果:
Elements: 001, 002, 003
Elements: 004, 005, 006
Elements: 007, 008, 009 */

03

项目地址

代码语言:javascript代码运行次数:0运行复制
点击下方卡片关注DotNet NB
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-04-12,如有侵权请联系 cloudcommunity@tencent 删除formatstring高性能框架内存

SmartFormat:轻量级文本模板库,轻松替代 string.Format

推荐一个 C# 编写的轻量级文本模板库,可以作为 string.Format 的替代品。

01

项目简介

SmartFormat不仅继承了 string.Format 的功能,还扩展了更多高级特性,例如命名占位符、列表格式化、本地化支持、复数化等。SmartFormat 提供了高性能、低内存占用的运行时格式化能力。

支持的目标框架

  • .Net Framework 4.6.2 及更高版本
  • .Net 标准 2.0、.Net 标准 2.1
  • .Net 6.0 或 .Net 8.0

02

使用方法

1、简单的例子

代码语言:javascript代码运行次数:0运行复制
var data = new { Library = "SmartFormat"};
_ = Smart.Format("Composed with {Library}.", data); 
// 结果: "Composed with SmartFormat."

2、类似于 string.Format 的风格的例子

代码语言:javascript代码运行次数:0运行复制
var stringFormat = string.Format("{0} {0:N2} {1:yyyy-MM-dd}", 5, new DateTime(1900, 12, 31));
var smartFormat = Smart.Format("{0} {0:N2} {1:yyyy-MM-dd}", 5, new DateTime(1900, 12, 31));
// 结果: (stringFormat == smartFormat) == true

3、格式化一个 IList 的例子

代码语言:javascript代码运行次数:0运行复制
var data = new [] {1, 2, 3, 4, 5};
_ = Smart.Format("{0:list:N2|,|, and }.", (object) data);
// 结果: "1.00, 2.00, 3.00, 4.00, and 5.00."

4、根据值选择输出字符串的例子

代码语言:javascript代码运行次数:0运行复制
var data = new[] { new { Name = "John", Gender = 0 }, new { Name = "Mary", Gender = 1 } };
_ = Smart.Format("{Name} commented on {Gender:choose:his|her} photo", data[1]);
// 结果: "Mary commented on her photo"

5、稍微复杂的例子:格式化器可以嵌套。在这个例子中,我们有一个带有嵌套 ListFormatter(其本身又包含一个 DefaultFormatter)的 ListFormatter。

代码语言:javascript代码运行次数:0运行复制
var data = new List<int[]> {
    new[] { 1, 2, 3 },
    new[] { 4, 5, 6 },
    new[] { 7, 8, 9 }
};
_ = Smart.Format("{0:list:Elements\\: {:list:{:000}|,|, }|\n|\n}", data);
/* 结果:
Elements: 001, 002, 003
Elements: 004, 005, 006
Elements: 007, 008, 009 */

03

项目地址

代码语言:javascript代码运行次数:0运行复制
点击下方卡片关注DotNet NB
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-04-12,如有侵权请联系 cloudcommunity@tencent 删除formatstring高性能框架内存

本文标签: SmartFormat轻量级文本模板库,轻松替代 stringFormat