You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C#插值字符串中变量的求值顺序是否为指定且可保证的行为?

C#插值字符串的变量求值顺序:明确可保证的左到右行为

好问题!我可以明确告诉你,.NET C#里插值字符串的变量确实是按从左到右的顺序求值,而且这是语言规范中明确指定的行为,完全可以放心依赖。

你给出的示例代码就能很好地验证这一点:

int cc = 0;
string dd = $@"first param is {cc++} second {cc++} and third is {cc++}";
Console.WriteLine(dd);

输出结果正如你看到的:

first param is 0 second 1 and third is 2

为什么会这样?

在C#的官方语言规范里,插值字符串的求值逻辑是这样规定的:

  • 首先会处理插值字符串的框架部分(也就是那些固定的文本内容)
  • 然后严格按照从左到右的顺序,依次计算每个{}包裹的插值表达式
  • 每个表达式的计算结果会被转换为字符串,替换到对应的位置中

回到你的例子,cc++是后置自增操作,每次求值时会先返回当前的cc值,再把cc加1。因为从左到右依次计算三个{cc++},所以第一个返回0,cc变成1;第二个返回1,cc变成2;第三个返回2,cc变成3,最终就得到了你看到的输出。

这不是某种“巧合”或者依赖于特定.NET版本的行为,而是语言本身定义的规则,无论你使用哪个符合C#规范的编译器(比如Roslyn),这个求值顺序都不会变。

内容的提问来源于stack exchange,提问作者Brady Moritz

火山引擎 最新活动