传递+ =或 - =作为c#中的参数

时间:2016-03-21 13:20:30

标签: c# .net

我有一个点击按钮的方法,在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();            
}

我想重构它并从中提取另一个方法,所以我不重用代码,但我不确定是否可以将运算符(+ =)作为参数传递给方法。可以这样做吗?

4 个答案:

答案 0 :(得分:4)

我不这么认为。如何将+1或-1传递给方法并将其与要添加或减去的值相乘。 例如:

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

答案 1 :(得分:0)

您可以传递一个为您添加和减去的方法。你可能想要走那条路。 Pass Method as Parameter using C#

答案 2 :(得分: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();         
}

答案 3 :(得分:0)

接受的答案允许传递0,这将使计算混乱。如果只想允许加法或减法,则可以使用布尔变量在参数列表中指定它:

public float calc(float val1, float val2, bool add) 
{
    int op = add ? 1 : -1;
    return val1 + op * val2;
}