3 回答
TA贡献1856条经验 获得超11个赞
首先,在C#语言中不使用临时变量进行交换是一个非常糟糕的主意。
但是为了答案,您可以使用以下代码:
startAngle = startAngle + stopAngle;
stopAngle = startAngle - stopAngle;
startAngle = startAngle - stopAngle;
但是,如果两个数字相差很大,则四舍五入会出现问题。这是由于浮点数的性质。
如果要隐藏临时变量,可以使用实用程序方法:
public static class Foo {
public static void Swap<T> (ref T lhs, ref T rhs) {
T temp = lhs;
lhs = rhs;
rhs = temp;
}
}
TA贡献1804条经验 获得超8个赞
交换两个变量的正确方法是:
decimal tempDecimal = startAngle;
startAngle = stopAngle;
stopAngle = tempDecimal;
换句话说,使用一个临时变量。
你有它。没有聪明的花招,没有代码的维护者来诅咒您数十年,没有进入The Daily WTF的条目,也没有花费太多的时间试图找出为什么需要一次操作,因为从最低的角度来看,甚至语言最复杂的功能是一系列简单的操作。
只是一个非常简单,易读,易于理解的t = a; a = b; b = t;解决方案。
在我看来,开发人员尝试使用技巧来“交换变量而不使用临时变量”或“ Duff的设备”,这只是在试图展示它们的聪明程度(并失败了)。
我把它们比作那些阅读粗俗书籍的人,这些阅读纯粹是为了在聚会上显得更加有趣(而不是扩大视野)。
与简单的“临时变量”解决方案(使用算术/布尔运算而不是在汇编级进行简单移动)相比,在其中添加和减去的解决方案或基于XOR的解决方案可读性较低,并且很可能会变慢。
通过编写高质量的可读代码来为自己和他人提供服务。
那是我的怒吼。谢谢收听 :-)
顺便说一句,我很清楚这不能回答您的特定问题(对此我会道歉),但是在SO上有很多先例,人们问过如何做某事,正确的答案是“不要做到”。
TA贡献1834条经验 获得超8个赞
是的,使用此代码:
stopAngle = Convert.ToDecimal(159.9);
startAngle = Convert.ToDecimal(355.87);
对于任意值,此问题更加困难。:-)
添加回答
举报