3 回答

TA貢獻1856條經(jīng)驗 獲得超11個贊
首先,在C#語言中不使用臨時變量進行交換是一個非常糟糕的主意。
但是為了答案,您可以使用以下代碼:
startAngle = startAngle + stopAngle;
stopAngle = startAngle - stopAngle;
startAngle = startAngle - stopAngle;
但是,如果兩個數(shù)字相差很大,則四舍五入會出現(xiàn)問題。這是由于浮點數(shù)的性質(zhì)。
如果要隱藏臨時變量,可以使用實用程序方法:
public static class Foo {
public static void Swap<T> (ref T lhs, ref T rhs) {
T temp = lhs;
lhs = rhs;
rhs = temp;
}
}

TA貢獻1804條經(jīng)驗 獲得超8個贊
交換兩個變量的正確方法是:
decimal tempDecimal = startAngle;
startAngle = stopAngle;
stopAngle = tempDecimal;
換句話說,使用一個臨時變量。
你有它。沒有聰明的花招,沒有代碼的維護者來詛咒您數(shù)十年,沒有進入The Daily WTF的條目,也沒有花費太多的時間試圖找出為什么需要一次操作,因為從最低的角度來看,甚至語言最復(fù)雜的功能是一系列簡單的操作。
只是一個非常簡單,易讀,易于理解的t = a; a = b; b = t;解決方案。
在我看來,開發(fā)人員嘗試使用技巧來“交換變量而不使用臨時變量”或“ Duff的設(shè)備”,這只是在試圖展示它們的聰明程度(并失敗了)。
我把它們比作那些閱讀粗俗書籍的人,這些閱讀純粹是為了在聚會上顯得更加有趣(而不是擴大視野)。
與簡單的“臨時變量”解決方案(使用算術(shù)/布爾運算而不是在匯編級進行簡單移動)相比,在其中添加和減去的解決方案或基于XOR的解決方案可讀性較低,并且很可能會變慢。
通過編寫高質(zhì)量的可讀代碼來為自己和他人提供服務(wù)。
那是我的怒吼。謝謝收聽 :-)
順便說一句,我很清楚這不能回答您的特定問題(對此我會道歉),但是在SO上有很多先例,人們問過如何做某事,正確的答案是“不要做到”。

TA貢獻1834條經(jīng)驗 獲得超8個贊
是的,使用此代碼:
stopAngle = Convert.ToDecimal(159.9);
startAngle = Convert.ToDecimal(355.87);
對于任意值,此問題更加困難。:-)
添加回答
舉報