C#中字符串插值与复合格式化在Console.WriteLine的用法区别
C# 两种字符串格式化语法详解
1. 复合格式化(参考源码使用的写法)
你看到的Console.WriteLine("{0} + {1} = {2}", num1, num2, num1+num2)属于C#的复合格式化语法,其中{0}、{1}、{2}是索引占位符:
- 占位符内的数字是参数的位置索引,从0开始依次递增,和后面传入的参数顺序一一对应
- 运行时会自动将占位符替换为对应位置参数的字符串形式:
{0}对应第一个参数num1,{1}对应第二个参数num2,{2}对应第三个参数num1+num2
这种语法是.NET 初代版本就支持的基础格式化方案,底层基于string.Format方法实现。
2. 内插字符串(你编写代码使用的写法)
你用到的Console.WriteLine($"{a} + {b} = {plus}")是C# 6.0 版本推出的内插字符串语法,是针对复合格式化的简化语法糖:
- 只需要在字符串开头加
$标记,就可以直接在大括号内写入变量、表达式甚至方法调用,不需要手动对应索引 - 编译器会自动解析大括号内的内容,完成变量替换,代码可读性远高于复合格式化
3. 两种写法的核心差异
- 兼容性:复合格式化兼容所有.NET版本,需要适配.NET Framework 4.6 以下的老旧项目时只能用这种写法;内插字符串仅支持C# 6.0/.NET Framework 4.6 及以上版本,目前绝大多数项目场景都可正常使用
- 易用性:内插字符串不需要记忆参数和占位符的对应关系,代码逻辑更直观,不会出现索引错位导致的输出错误;参数较多时复合格式化很容易出现索引和参数不匹配的问题
- 灵活性:复合格式化支持模板复用,你可以把格式化模板
"{0} + {1} = {2}"单独存为变量,在不同业务位置传入不同参数生成字符串;内插字符串的变量是直接绑定在当前上下文的,无法单独复用模板 - 性能:常规使用场景下二者性能没有明显差异,编译器会把简单的内插字符串自动编译为等效的
string.Format调用
内容的提问来源于stack exchange,提问作者Bappy Sani4 4846
相关产品推荐
相关产品推荐

