在不使用临时变量的情况下交换两个数字

Swap two numbers without using temp variable

我浏览了几个示例并遇到了以下代码:

(a, b) = (b, a);

有人提到这可以用来交换两个变量的值。

我试了一下如下:

int a = 5, b = 10;
Console.WriteLine(a + " " + b); // Prints --> 5 10
  
(b, a) = (a, b);
Console.WriteLine(a + " " + b); // Prints --> 10 5

这是什么语法?这是新的东西还是获得交换结果的一些奇怪的技巧。它也可以与任意数量的变量一起使用吗?

喜欢:

(a, b, c) = (c, a, b); // a=c; b=a; c=b; or even more variables

它在 = 的右侧创建一个元组,然后在左侧将其解构(变成不同的变量)。参见 this page of the fine manual

如果您熟悉几年前引入的 Tuple,实际上编译器正在为您编写 类似这样的东西

var t = new Tuple<int,int>(a, b); //create with Item1 = a and Item2 = b
b = t.Item1;
a = t.Item2;

它到底会写什么代码,我不知道,但这就是它的精神;要创建一个临时的(可能是值)元组,将 a 和 b 分配给它然后以相反的顺序再次将它们取出