Простая и очень интересная проблема:
Из приведенного ниже кода мне было интересно, что в обоих условиях переменная 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.
Вывод:
![enter image description here](https://i.stack.imgur.com/0U72C.png)
Может кто-нибудь кратко объяснить, что происходит под капотом?
// Что делает компилятор C # в обоих случаях?.