簡體   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