C#中的字符串格式化

在C#中,字符串格式化是一种将变量或表达式插入到字符串中的方法,常用于生成动态文本、输出日志、显示用户信息等。C#提供了多种字符串格式化方式,以下是几种常用的方法:

1. string.Format 方法

这是最传统的字符串格式化方式,使用占位符 {0}、 {1} 等来表示参数位置。

string name = "张三";
int age = 25;
string message = string.Format("我的名字是{0},今年{1}岁。", name, age);
Console.WriteLine(message); // 输出:我的名字是张三,今年25岁。

2. 插值字符串(Interpolated Strings)------推荐方式(C# 6.0+)

使用 $ 符号,可以直接在字符串中嵌入变量,语法更简洁清晰。

string name = "李四";
int age = 20;
string message = $"我的名字是{name},今年{age}岁。";
Console.WriteLine(message); // 输出:我的名字是李四,今年20岁。

你还可以在 {} 中进行简单表达式运算:

string message = $"五年后,我将{age + 5}岁。"; // 输出:五年后,我将35岁。

3. 复合格式化(Composite Formatting)

与 string.Format 类似,也可用于 Console.WriteLine 等方法:

Console.WriteLine("姓名:{0},年龄:{1}", name, age);

4. 格式说明符(Format Specifiers)

可以对数字、日期等进行特定格式化,例如:

double price = 1234.567;
string formatted = "价格:{price:C}"; // 货币格式:¥1,234.57(根据区域设置) string percent = "{0.123:P}"; // 百分比:12.30%
string date = $"{DateTime.Now:yyyy-MM-dd}"; // 日期格式:2025-04-05

常用格式符:

C:货币

D:十进制整数(常用于补零)

F:固定小数位数

N:带千位分隔符的数字

P:百分比

D、T、yyyy-MM-dd 等:日期时间 示例:

int num = 42;
Console.WriteLine($"{num:D5}"); // 输出:00042(5位宽,前面补零)

5. ToString() 方法配合格式字符串

基本类型支持 ToString(string format) 方法:

double value = 1234.56;
string s = value.ToString("N2"); // 输出:1,234.56

6. StringBuilder 中的格式化

当需要高效拼接大量字符串时,可结合 StringBuilder 使用 AppendFormat:

var sb = new StringBuilder();
sb.AppendFormat("欢迎 {0},您有 {1} 条未读消息。", name, 5);
Console.WriteLine(sb.ToString());

总结对比:

| 方法 | 优点 | 推荐场景 | |------|------|----------| | string.Format | 兼容旧版本,适合复杂逻辑 | .NET Framework 项目 | | 插值字符串 $"" | 语法简洁、易读 | 推荐现代C#开发首选 | | 复合格式化 | 直接输出,无需变量 | Console.WriteLine 等 | | ToString(format) | 精确控制数值格式 | 数字、日期格式化 |

? 建议:在现代C#开发中,优先使用插值字符串($""),它不仅可读性强,还支持表达式和格式化说明符,例如:

$"今天的日期是 {DateTime.Now:yyyy年MM月dd日},温度是 {25.6:F1}℃。"

这样代码更直观、易于维护。

相关推荐
扶风ff5 小时前
练题簿在线免费刷题:会员线下组卷、Word 试卷与成绩导入,课堂检测更方便
java·开发语言·算法·小程序·word
程序员老陆5 小时前
C++ 多线程通信方式全景:从共享内存到结构化协调
开发语言·c++
kim5 小时前
一个人 + AI,用 WinForms 搓了个 376KB 的 Windows 便签:便签 / 截图 / 标注 / OCR / 待办全塞进去了
c#
极光通讯5 小时前
服务器内存替代料选型方法论:主料号缺货时如何找到Pin-to-Pin兼容型号
运维·服务器
weixin199701080165 小时前
《1688消息服务落地方案:alibaba.message.* 与 Webhook 回调的可靠性与重试策略》(附Python源码)
开发语言·python
ZHOUPUYU6 小时前
PHP 9.0 前瞻:下一代 PHP 会带来哪些新功能?
android·开发语言·php
某不知名網友6 小时前
ROS2 核心通信:话题发布与订阅详解
开发语言·c++
C++ 老炮儿的技术栈6 小时前
char (*csConnectName)[256]; 和 char csConnectName [256] 有什么区别
java·c语言·开发语言·c++·人工智能·算法·c
hez20106 小时前
一行代码在 .NET 项目里启用 Satori GC
c#·.net·.net core·gc·clr
Nebula_g6 小时前
JavaSE加强:线程Thread(线程安全重点)
java·开发语言·jvm·算法·javase·技术栈