首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >交换两个变量而不使用临时变量

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

Stack Overflow用户
提问于 2009-04-29 23:09:31
回答 20查看 191.3K关注 0票数 88

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

代码语言:javascript
复制
decimal startAngle = Convert.ToDecimal(159.9);
decimal stopAngle = Convert.ToDecimal(355.87);

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

回答 20

Stack Overflow用户

发布于 2009-04-29 23:31:01

可以,请使用以下代码:

代码语言:javascript
复制
stopAngle = Convert.ToDecimal(159.9);
startAngle = Convert.ToDecimal(355.87);

对于任意值,这个问题就更难了。:-)

票数 74
EN

Stack Overflow用户

发布于 2009-12-29 15:34:49

代码语言:javascript
复制
int a = 4, b = 6;
a ^= b ^= a ^= b;

适用于所有类型,包括字符串和浮点数。

票数 43
EN

Stack Overflow用户

发布于 2013-03-06 02:17:23

BenAlabaster展示了一种进行变量切换的实用方法,但不需要try-catch子句。这段代码就足够了。

代码语言:javascript
复制
static void Swap<T>(ref T x, ref T y)
{
     T t = y;
     y = x;
     x = t;
}

用法如图所示:

代码语言:javascript
复制
float startAngle = 159.9F
float stopAngle = 355.87F
Swap(ref startAngle, ref stopAngle);

您还可以使用扩展方法:

代码语言:javascript
复制
static class SwapExtension
{
    public static T Swap<T>(this T x, ref T y)
    {
        T t = y;
        y = x;
        return t;
    }
}

像这样使用它:

代码语言:javascript
复制
float startAngle = 159.9F;
float stopAngle = 355.87F;
startAngle = startAngle.Swap(ref stopAngle);

这两种方法都在方法中使用临时变量,但在进行交换时不需要临时变量。

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/804706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档