Вчера, в очередной раз столкнувшись с интересным поведением кода, я решил привести пару примеров из C# и MS SQL, которые в свое время меня удивили.
С этим поведением я встретился несколько лет назад, когда только начал изучать C#. Применив знакомый метод, чтобы поменять значения 2-х переменных местами, я с удивлением обнаружил, что он не работает.
В итоге, в первый раз все проходит нормально и значения переменных меняются, а во второй раз, вопреки ожиданиям, у нас обнуляется переменная x.
Пример 1. Меняем местами значения переменных (C#)
С этим поведением я встретился несколько лет назад, когда только начал изучать C#. Применив знакомый метод, чтобы поменять значения 2-х переменных местами, я с удивлением обнаружил, что он не работает.
//Задаем 2 переменные
int x = 1, y = 2;
//Меняем их значения при помощи xor
x ^= y;
y ^= x;
x ^= y;
//Выводим результат [x=2;y=1]
Console.WriteLine("x = {0};y = {1}", x, y);
//Снова меняем их значения, но только пишем все в одну строчку
x ^= y ^= x ^= y;
//Выводим результат [x=0;y=2]
Console.WriteLine("x = {0};y = {1}", x, y);
* This source code was highlighted with Source Code Highlighter.
В итоге, в первый раз все проходит нормально и значения переменных меняются, а во второй раз, вопреки ожиданиям, у нас обнуляется переменная x.