Как C# оценивает выражения, содержащие присваивания?C#

Место общения программистов C#
Ответить
Anonymous
 Как C# оценивает выражения, содержащие присваивания?

Сообщение Anonymous »

У меня был опыт работы с C/C++. Я столкнулся со странным способом обмена двумя значениями в C#.

Код: Выделить всё

int n1 = 10, n2=20;
n2 = n1 + (n1=n2)*0;
В C# две приведенные выше строки меняют местами значения между n1 и n2. Для меня это сюрприз, так как в C/C++ результат должен быть n1=n2=20.

Итак, как же C# оценивает выражение? Похоже, + выше рассматривается как функция, вызывающая меня. Следующее объяснение кажется разумным. НО мне кажется это странным.
  • Сначала (n1=n2) выполняется. И таким образом n1=20.
  • Тогда n1 в n1+ (n1=n2)*0 еще не равно 20. Он рассматривается как параметр функции, поэтому помещается в стек и по-прежнему равен 10. Следовательно, n2=10+0=10.


Подробнее здесь: https://stackoverflow.com/questions/250 ... ssignments
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»