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