C字符串拼接演进全解析 : 让你的代码更优化

360影视 动漫周边 2025-09-16 08:39 1

摘要:使用string.Formatstring msg = string.Format("My name is {0}, I am {1} years old.", name, age);

在日常开发中,字符串拼接是一个高频操作:日志记录、UI 文本渲染、SQL 拼接、报错提示……

C# 提供了多种方式来组合字符串,从最早的拼接,到string.Format,再到现在的字符串内插,让代码变得更加简洁优雅。string name = "Alice";
int age = 25;
string msg = "My name is " + name + ", I am " + age + " years old.";

⚠️ 缺点:可读性差,尤其在复杂拼接时显得混乱。

使用string.Formatstring msg = string.Format("My name is {0}, I am {1} years old.", name, age);

✅ 优点:比 +拼接更清晰

⚠️ 缺点:参数顺序不直观,容易写错 {0} {1}。

C# 6 引入了 字符串内插,让拼接更直观。

string name = "Alice";
int age = 25;
string msg = $"My name is {name}, I am {age} years old.";只需要在字符串前加,就能在{}中直接写变量或表达式。

不仅可以放变量,还可以直接放表达式:

int a = 5, b = 3;
string result = $"Sum: {a + b}, Product: {a * b}";
Console.WriteLine(result);
// 输出:Sum: 8, Product: 15

甚至支持 方法调用

string msg = $"Current time: {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}";

字符串内插与 格式化字符串完美结合。

数字格式化double price = 1234.567;
string msg = $"Price: {price:F2}";
// 输出: Price: 1234.57日期格式化DateTime now = DateTime.Now;
string msg = $"Today: {now:yyyy/MM/dd}";对齐输出-10表示左对齐,占 10 个字符宽度。✅ 多行内插字符串

C# 11开始,可以用原始字符串字面量结合内插:

string name = "Alice";
string JSON = $$"""
{
"Name": "{{name}}",
"Age": 25
}
""";
Console.WriteLine(json);

这种写法对生成 JSON/XML/SQL特别友好。

✅ 与Span结合的高性能字符串内插

C# 10 引入了 插值字符串处理器,可以避免不必要的字符串分配,提升性能。例如:

public void LogMessage(FormattableString message)
{
Console.WriteLine(message.ToString);
}

LogMessage($"User {name} logged in at {DateTime.Now}");FormattableString可以延迟格式化,甚至直接转换为 SQL 参数化查询,提升性能和安全性。

来源:opendotnet

相关推荐