2012-07-25 79 views
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 +變量)。

+0

您可以輕鬆使用循環。 – 2012-07-25 14:15:29

+3

如果你經常爲這些變量添加一個常量,爲什麼不把它放在一個私有方法中,只是調用方法? – Thelonias 2012-07-25 14:17:31

回答

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

包裹的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

你可以定義一個方法來增加所有三個變量,並通過引用傳遞變量:

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

_治療比疾病更糟!_但仍然是一個有效的答案。 ;-) – 2012-07-25 14:24:36

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

Tadah:d

但我不不推薦使用這個!當然,更好的方法是創建一個方法。這也只會給你一行(+一個方法聲明)。

+2

我只是嘔吐了一下。 :)但是,我讚賞你的努力,以準確回答OP的要求。 – Thelonias 2012-07-25 14:33:29

+0

@Ryan一直在OP的服務! :D當然這是非常糟糕的,這就是爲什麼我反對它並給出了一個替代方案。 ^^ – brimborium 2012-07-25 14:48:16

相關問題