我希望能够交换两个变量,而无需在C#中使用临时变量。能做到吗?

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;

但是,如果两个数字相差很大,则四舍五入会出现问题。这是由于浮点数的性质。

如果要隐藏临时变量,可以使用实用程序方法:
public static class Foo {

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

10-02 21:19