交换两个变量而不使用临时变量

我希望能够在不使用C#中使用临时变量的情况下交换两个变量。能做到吗?


decimal startAngle = Convert.ToDecimal(159.9);

decimal stopAngle = Convert.ToDecimal(355.87);


// Swap each:

//   startAngle becomes: 355.87

//   stopAngle becomes: 159.9


HUWWW
浏览 548回答 3
3回答

呼唤远方

首先,在C#语言中不使用临时变量进行交换是一个非常糟糕的主意。但是为了答案,您可以使用以下代码:startAngle = startAngle + stopAngle;stopAngle = startAngle - stopAngle;startAngle = startAngle - stopAngle;但是,如果两个数字相差很大,则四舍五入会出现问题。这是由于浮点数的性质。如果要隐藏临时变量,可以使用实用程序方法:public static class Foo {&nbsp; &nbsp; public static void Swap<T> (ref T lhs, ref T rhs) {&nbsp; &nbsp; &nbsp; &nbsp; T temp = lhs;&nbsp; &nbsp; &nbsp; &nbsp; lhs = rhs;&nbsp; &nbsp; &nbsp; &nbsp; rhs = temp;&nbsp; &nbsp; }}

胡说叔叔

交换两个变量的正确方法是:decimal tempDecimal = startAngle;startAngle = stopAngle;stopAngle = tempDecimal;换句话说,使用一个临时变量。你有它。没有聪明的花招,没有代码的维护者来诅咒您数十年,没有进入The Daily WTF的条目,也没有花费太多的时间试图找出为什么需要一次操作,因为从最低的角度来看,甚至语言最复杂的功能是一系列简单的操作。只是一个非常简单,易读,易于理解的t = a; a = b; b = t;解决方案。在我看来,开发人员尝试使用技巧来“交换变量而不使用临时变量”或“ Duff的设备”,这只是在试图展示它们的聪明程度(并失败了)。我把它们比作那些阅读粗俗书籍的人,这些阅读纯粹是为了在聚会上显得更加有趣(而不是扩大视野)。与简单的“临时变量”解决方案(使用算术/布尔运算而不是在汇编级进行简单移动)相比,在其中添加和减去的解决方案或基于XOR的解决方案可读性较低,并且很可能会变慢。通过编写高质量的可读代码来为自己和他人提供服务。那是我的怒吼。谢谢收听 :-)顺便说一句,我很清楚这不能回答您的特定问题(对此我会道歉),但是在SO上有很多先例,人们问过如何做某事,正确的答案是“不要做到”。

MMMHUHU

是的,使用此代码:stopAngle = Convert.ToDecimal(159.9);startAngle = Convert.ToDecimal(355.87);对于任意值,此问题更加困难。:-)
打开App,查看更多内容
随时随地看视频慕课网APP