1. ホーム
  2. c#

[解決済み] テンポラリ変数を使用せずに2つの変数を入れ替える

2023-04-14 02:10:24

質問

C#で一時変数を使用せずに2つの変数を入れ替えられるようにしたいです。これはできるのでしょうか?

decimal startAngle = Convert.ToDecimal(159.9);
decimal stopAngle = Convert.ToDecimal(355.87);

// Swap each:
//   startAngle becomes: 355.87
//   stopAngle becomes: 159.9

どのように解決するのですか?

まず、C#のような言語で一時変数なしでスワップするのは 非常に悪い考えです。 .

しかし、答え合わせのために、このコードを使うことができます。

startAngle = startAngle + stopAngle;
stopAngle = startAngle - stopAngle;
startAngle = startAngle - stopAngle;

しかし、2つの数値が大きく異なる場合、丸め誤魔化してしまうという問題が発生することがあります。これは浮動小数点数の性質によるものです。

一時的な変数を隠したい場合は、ユーティリティメソッドを使用することができます。

public static class Foo {

    public static void Swap<T> (ref T lhs, ref T rhs) {
        T temp = lhs;
        lhs = rhs;
        rhs = temp;
    }
}