在 C# 中,string 是表示文本的不可变引用类型。字符串支持插值、丰富的方法库,以及——对性能而言重要的是——StringBuilder 用于高效的重复修改。
字符串插值和创建
csharp
name = ;
age = ;
msg = ;
formatted = ;
path = ;
multi = ;
字符串插值($"...")是用嵌入值和格式说明符构建字符串的现代、可读的方式。逐字字符串(@)禁用转义(非常适合路径/正则表达式),原始字符串字面量("""")处理多行文本。
string s = "Hello";
s.ToUpper(); // returns a NEW string "HELLO"; s is unchanged
s = s + " World"; // creates a NEW string; the old "Hello" is discarded
每个"修改"字符串的操作实际上创建一个新字符串(不可变性)。这很安全,但对重复修改来说有性能成本。
// ❌ string concatenation in a loop — creates a new string each iteration (slow, O(n²))
string result = "";
for (int i = 0; i < 10000; i++) result += i;
// ✅ StringBuilder mutates a buffer — efficient (O(n))
var sb = new StringBuilder();
for (int i = 0; i < 10000; i++) sb.Append(i);
string final = sb.ToString();
在循环中构建字符串时,StringBuilder 避免创建许多中间字符串——一个关键的性能做法。
s.Length; s.ToUpper(); s.Trim(); s.Substring(0, 5);
s.Contains("x"); s.IndexOf("x"); s.Replace("a", "b");
s.Split(','); string.Join(",", items);
string.IsNullOrEmpty(s); string.IsNullOrWhiteSpace(s);
字符串操作在编程中无处不在(构建输出、处理输入、格式化数据),因此理解 C# 字符串是必需的日常知识。
现代特性对生产力很重要:字符串插值($"...")是用嵌入值和格式化构建字符串的简洁、可读方式,逐字/原始字符串字面量优雅地处理路径和多行文本。
至关重要的是,理解字符串是不可变的(每个"修改"都创建一个新字符串)解释了一个关键的性能考虑:朴素的循环中字符串连接是浪费性的(O(n²),创建许多中间字符串),了解对重复修改使用**StringBuilder**(它高效地改变内部缓冲区)是一个重要的实用优化,直接来自理解不可变性。
了解丰富的字符串方法库(搜索、替换、拆分/连接、格式化)、现代插值语法和由不可变性驱动的 StringBuilder 做法是编程涉及的持续字符串工作的核心知识——这里的熟练度,特别是插值的便利性和 StringBuilder 的性能修复,是编写干净、高效 C# 的基础。