在一行中更改多个变量?

时间:2012-07-25 14:13:37

标签: c# .net

让我说我有这个

int x = 0;
int y = 0;
int z = 0;
const int v = 50;

//change x,y,z
x += v;
y += v;
z += v;

很好,但有没有更短的方法来避免这3行代码(+=)并且只有一行?我只是问自己,因为我必须经常为这些变量添加一些常量,然后我必须总是添加+3行(或者如果我有xyz +变量则更多)。

4 个答案:

答案 0 :(得分:8)

如果这种情况经常发生,您可能希望将它们放在一个类中。例如,如果这些是虚拟页面中的位置:

class PageLoc
{
    public int Header { get; set; }
    public int Body { get; set; }
    public int Footer { get; set; }

    void MoveAll(int distance) {
        Header += distance;
        Body += distance;
        Footer += distance;
    }
}

这样,您可以单独或集体更改其值。

答案 1 :(得分:3)

您可以定义一个方法来增加所有三个变量并通过引用传递变量:

Add(ref x, ref y, ref z, 50);

void Add(ref int x, ref int y, ref int z, int v)
{
    x += v;
    y += v;
    z += v;
}

答案 2 :(得分:1)

将x,y,z包装到一个类中并编写一个方法来向所有三个方法添加一个常量:

class XYZ
{
  public void Add (int v) { x += v; y += v; z += v; }
  int x,y,x;
}

上面使用的一些代码:

void F ()
{
  XYZ xyz;

  xyz.Add (3);
}

当然,您可以通过重载+ =运算符以及其他运算符来改进上述内容。实际上,您已经创建了一个向量,并且已经有可用的库(可能在DirectX中)。

答案 3 :(得分:1)

z += 0 * (y += 0 * (x += v) + v) + v;

Tadah:D

但我不建议使用它!当然更好的方法是创建一个方法来做到这一点。这也只会给你一行(+方法声明)。