1

可以说我有这个

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

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

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

4

4 回答 4

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;
    }
}

这样,您可以单独或集体更改它们的值。

于 2012-07-25T14:17:23.430 回答
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;
}
于 2012-07-25T14:20:55.507 回答
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 中)。

于 2012-07-25T14:18:24.580 回答
1
z += 0 * (y += 0 * (x += v) + v) + v;

塔达:D

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

于 2012-07-25T14:30:19.363 回答