2016-03-21 39 views
2

我有一個按鈕的方法點擊在C#下面的代碼(小高爾夫評分程序我的工作只是爲了好玩):通行證+ =或 - =在C#中的參數

private void btnPlus_Click(object sender, EventArgs e) 
{ 
    btnMinus.Enabled = true; 
    if (f_intHoleNumber != 18) { f_intHoleNumber += 1; } 
    if (f_intHoleNumber == 18) { btnPlus.Enabled = false; } 
    txtHoleNumber.Text = f_intHoleNumber.ToString();    
} 

我想重構,並從中提取另一種方法,所以我不重複使用代碼,但我不確定是否有可能將運算符(+ =)作爲參數傳遞給方法。這可以做到嗎?

+0

創建兩個方法:首先會增加你的價值,第二個 - 減少。什麼是問題? – SeM

+2

更簡單,但傳遞值:'f_intHoleNumber + = value',其中'value'爲'+ 1/-1'。 – xanatos

回答

4

我不這麼認爲。將+1或-1傳遞給該方法並將其與該值相乘以添加或減去的方法如何? 例如:

public float calc(float val1, float val2, int op) 
{ 
    return val1 + op * val2; 
} 
+1

或簡單地通過'-1 *值'。 –

+0

從來沒有想到這一點。好交易。謝謝! – snapper

+0

我很高興能夠提供幫助。 :) – Spatzenjaeger

0

您可以通過一種方法來爲您進行加減。你可能想要走這條路。 Pass Method as Parameter using C#

+1

這是一個比答案更多的評論。 –

+0

對不起,沒有意識到有什麼區別。 –

+0

您並不是真正提供解決方案,只是解決方案的鏈接。 [這更多的是評論。](http://meta.stackexchange.com/q/225370/245360) –

0

您可以通過Func<int, int>接受一個int參數並返回一個int。

private void btnPlus_Click(object sender, EventArgs e) 
{ 
    HandleHoleChange(currentHole => currentHole + 1);  
} 

private void HandleHoleChange(Func<int, int> getNextHoleFunc) 
{ 
    btnMinus.Enabled = true; 
    if (f_intHoleNumber != 18) { f_intHoleNumber = getNextHoleFunc(f_intHoldNumber); } 
    if (f_intHoleNumber == 18) { btnPlus.Enabled = false; } 
    txtHoleNumber.Text = f_intHoleNumber.ToString();   
}