Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在不使用临时变量的情况下交换两个数字_C#_.net_Swap - Fatal编程技术网

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

C# 在不使用临时变量的情况下交换两个数字,c#,.net,swap,C#,.net,Swap,我浏览了几个示例,发现了以下代码: (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) = (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
这是什么语法?这是什么新的东西,或者这是某种奇怪的技巧来获得交换的结果。它也可以用于任意数量的变量

比如:


它在
=
的右侧创建一个元组,然后在左侧将其解构(分解为不同的变量)。看

如果您熟悉几年前引入的元组,编译器实际上是在为您编写类似的内容:

var t = new Tuple<int,int>(a, b); //create with Item1 = a and Item2 = b
b = t.Item1;
a = t.Item2;
var t=新元组(a,b)//使用Item1=a和Item2=b创建
b=t.1项;
a=t.2;

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

这不是对您的问题的回答,而是:它是一种语法糖。因此,这可能不是“交换两个整数而不使用临时变量”问题的解决方案。请参阅。不使用temp变量进行交换是不可能的。你所能做的就是让编译器担心创建temp变量——但它仍然存在。语法只是用原始值构造一个元组,然后将元组分解为两个目标变量。请参阅或一式两份。@Franz:“不使用临时变量进行交换是不可能的”--严格来说不是真的。使用固定常数和数学,可以交换两个变量中的值。你可以考虑固定常量“变量”本身,但是你看它,它不是一个临时变量(即一个值的临时存储)。@ FranzGleichmann <代码> int a=5;int b=3;a=a^b;b=b^a;a=a^b-交换
a
b
,无需附加变量。两点:1)我不认为将语法显示为使用
Tuple
类是有意义的,因为使用实际使用的
ValueTuple
类型可以同样轻松地显示实际语法,2)您发布的代码是非法的,无法编译。@PeterDuniho使用旧元组的目的是,使用时间越长,人们越可能熟悉它。我个人并不认为用用户不熟悉的东西来解释一个不熟悉的概念有什么意义。Tuple和ValueTuple非常相似,一个人可以阅读其中一个的代码并将其理解为另一个,但我试图避免OP头脑中的“挂起,我知道什么是Tuple,但什么是ValueTuple?它有什么不同?(谷歌)哦……在这种情况下它有点不一样”
var t = new Tuple<int,int>(a, b); //create with Item1 = a and Item2 = b
b = t.Item1;
a = t.Item2;