簡體   English   中英

在 C# 編譯中發生了什么?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM