You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中Console.WriteLine两种写法输出结果差异的原因咨询

为什么两段Console.WriteLine输出结果差异这么大?

这是个很经典的运算符优先级坑!我来给你拆解清楚:

先看你的测试代码:

var a = "hello"; var b = string.Copy(a);
Console.WriteLine($"a == b: {a == b}");
Console.WriteLine("a == b:" + a == b);

第一段输出正常的原因

第一段用了C#的字符串插值语法($""),这个语法会先解析花括号里的表达式a == b,得到布尔值True,再把它嵌入到整个字符串中,最终输出完整的a == b: True,完全符合预期。

第二段只输出False的核心原因

问题出在C#的运算符优先级上:
在C#的运算符优先级规则里,字符串拼接的+运算符优先级,要高于相等比较的==运算符。所以第二段代码的执行顺序根本不是你想的“先拼接前缀和比较结果”,而是:

  1. 先执行 "a == b:" + a,得到新字符串 "a == b:hello"
  2. 再把这个新字符串和变量b(值为"hello")做相等比较:"a == b:hello" == "hello",结果显然是False
  3. 最后Console.WriteLine输出的是这个比较的布尔结果,也就是False,自然就看不到你原本想输出的前缀了。

如何修复第二段代码

如果想要第二段和第一段输出一致,你需要给a == b加上括号,强制让比较运算先执行,再做字符串拼接:

Console.WriteLine("a == b:" + (a == b));

这样修改后,会先计算a == b得到True,再和前缀拼接,最终输出a == b:True。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:45:14