[英]What is going on Under the hood in C# Compilation?
簡單且非常有趣的問題:
從下面的代碼中,我想知道在這兩種情況下Check
變量都為true
但我錯了。
using System;
namespace Problem
{
class Program
{
static void Main(string[] args)
{
int firstNumber = 1;
int secondNumber = 9;
bool Check = false;
Console.WriteLine("Checking First Condition.");
Console.WriteLine("------------------");
if (firstNumber == (firstNumber = secondNumber))
{
Check = true;
Console.WriteLine("First Check : {0}", Check);
}
else
{
Check = false;
Console.WriteLine("First Check : {0}", Check);
}
Console.WriteLine("------------------");
Console.WriteLine();
Console.WriteLine("Checking Second Condition.");
Console.WriteLine("------------------");
// Resetting firstNumber value:
firstNumber = 1;
if ((firstNumber = secondNumber) == firstNumber)
{
Check = true;
Console.WriteLine("Second Check : {0}", Check);
}
else
{
Check = false;
Console.WriteLine("Second Check : {0}", Check);
}
Console.WriteLine("------------------");
}
}
}
但從前不久開始思考。 但我不明白為什么第一個條件返回True
試運行:
第一個條件。 (1 == (1 = 9) // firstnumber = 9. so 9 == 9 // True.
第二個條件。 ((1 = 9) == 1) // firstnumber = 9. so 9 == 9 // True.
輸出:
有人可以簡要解釋一下幕后發生的事情嗎?
// 在這兩種情況下,C# 編譯器都做了什么?
條件/表達式從左到右計算。 所以,
int firstNumber = 1;
int secondNumber = 3;
第一種情況:
firstNumber == (firstNumber = secondNumber)
1 == (firstNumber = secondNumber)
1 == ( 1 = secondNumber)
1 == ( 1 = 3 )
1 == 3
false
第二種情況:
((firstNumber = secondNumber) == firstNumber)
( 1 = secondNumber) == firstNumber
( 1 = 3 ) == firstNumber
( 3 ) == firstNumber //firstNumber became 3
3 == 3
true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.