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