为什么不将重复的代码提取到方法中?
private void Function1()
{
// do function1
}
private void Function2()
{
// do function2
}
private void button1_Click()
{
Function1() ;
if(condition)
{
//...decrement an integer
Function2();
}
}
private void button2_Click()
{
Function1();
if(another condition)
{
//...increment an integer
Function2();
}
}
如果您有许多具有相同结构的类似方法,请考虑创建
private void DoSomething(Func<bool> condition, Action action)
{
Function1();
if (condition())
{
action();
Function2();
}
}
并以这种方式调用它:
private int value;
private void button2_Click()
{
DoSomething(() => value < 5, () => value++);
}
当然,如果您需要将一些参数传递给条件或操作,您应该更改Func
或Action
键入。如果您需要从操作中返回一些值,也可以使用Func
而不是。Action
private int value;
private void button2_Click()
{
DoSomething((x) => x % 2 == 0, (x) => x.ToString());
}
private void DoSomething(Func<int, bool> condition, Func<int, string> action)
{
Function1();
if (condition(value))
{
string result = action(value);
Function2();
}
}
如果您的条件和操作不是那么简单,请使用命名方法而不是 lambda:
private bool FooCondition(int x)
{
// complex condition here
}
private string BarAction(int x)
{
// complex action here
}
private void button2_Click()
{
DoSomething(FooCondition, BarAction);
}