繁体   English   中英

C#Console.WriteLine很奇怪

[英]C# Console.WriteLine Weird

这是C#中的一个简单脚本,它输出两个不同的东西。 问题不在于比较对象-不要被误导。 这是关于使用Console.WriteLine发送输出。

var a = "hello";
var b = string.Copy(a);

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

第一个Console.WriteLine输出a == b: True ,第二个Console.WriteLine输出False ,这意味着忽略引号中的部分( "a == b:" )。

我正在使用VS 2015和C#4.5.2-用4.6测试仍然是相同的结果。

任何对此行为的想法高度赞赏。

==运算符的优先级低于+运算符。 这意味着首先将"a == b:"a串联( + ),然后将结果与b进行比较( == ),并返回False

请参阅: https : //docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/operators/

可加运算符比等式运算符高,因此它们的优先级更高。

您可以使用()强制使用它,在下面的代码中,首先对a == b求值:

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

您的第一个示例使用字符串插值,其中在调用ToString之前先对整个表达式求值,然后将结果与其余值连接在一起。

第二行正在评估:

"a == b:" + a == b

并正确返回False。 IE浏览器

( "a == b:" + a ) == b

因此,将字符串构建为a == b:hello' and being compared to 'hello' as the + operation is done before the ==` operation is done before the

您可以通过在方括号a == b周围解决此问题

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

您的第二行是'字符串文字+ a'== b,这将是错误的。 本质上你在做

"a == b:hello" == b

总是会返回false。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM