[英]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.