Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过+;=或-=作为c中的参数#_C#_.net - Fatal编程技术网

C# 通过+;=或-=作为c中的参数#

C# 通过+;=或-=作为c中的参数#,c#,.net,C#,.net,我用c#(我只是为了好玩而开发的小型高尔夫计分程序)中的以下代码点击按钮,就有了一个方法: 我想重构它并从中提取另一个方法,这样我就不会重用代码,但我不确定是否可以将运算符(+=)作为参数传递给方法。这能做到吗 我不这么认为。将+1或-1传递给该方法并将其与要加或减的值相乘怎么样。 例如: public float calc(float val1, float val2, int op) { return val1 + op * val2; } 您可以传递一个为您执行加法和减法的方法

我用c#(我只是为了好玩而开发的小型高尔夫计分程序)中的以下代码点击按钮,就有了一个方法:


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

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

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

您可以传递一个为您执行加法和减法的方法。你可能想走那条路。

您可以传递一个接受一个int参数并返回int的
Func

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();         
}
private void btnPlus\u单击(对象发送方,事件参数e)
{
HandleHoleChange(currentHole=>currentHole+1);
}
私有void HandleHoleChange(Func getNextHoleFunc)
{
btnMinus.Enabled=true;
如果(f_intHoleNumber!=18){f_intHoleNumber=getNextHoleFunc(f_intHoldNumber);}
如果(f_intHoleNumber==18){btnPlus.Enabled=false;}
txtHoleNumber.Text=f_intHoleNumber.ToString();
}

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

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

创建两种方法:第一种方法会增加你的价值,第二种方法-减少。有什么问题吗?更简单的是,传递值:
f_intHoleNumber+=value
,其中
value
+1/-1
。或者只需在
-1*value
中输入pas。从未想过这一点。好交易。谢谢我很高兴能帮上忙。:)这与其说是一个答案,不如说是一个评论。很抱歉,我没有意识到这两者之间存在差异。你并没有真正提供解决方案,只是提供了一个指向解决方案的链接。
public float calc(float val1, float val2, bool add) 
{
    int op = add ? 1 : -1;
    return val1 + op * val2;
}