我可以在 C# 中将条件作为参数传递给方法吗

use*_*443 5 c# c#-4.0

我有 2 个按钮执行相同的功能但处于不同的状态。有代码是这样的。

private void button1_Click(){
// do function1

if(condition){
    ...decrement an integer
    //do function2
}
}


private void button2_Click(){
// do function1

if(another condition){
    ...increment an integer

    //do function2
}
}
Run Code Online (Sandbox Code Playgroud)

我可以传递条件 1 和条件 2 并递增、递减方法吗?

who*_*itz 5

是的你可以。但是你能做的事情仍然有限。考虑这个

public void Foo(Action action, Func<Boolean> someCondition) {
    if (someCondition() == true) action();
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么写 `if (condition() == true)` 而不是简单的 `if (condition())`? (8认同)
  • 个人喜好,我认为它更具可读性。我也使用 condition() == false。 (2认同)

Fra*_*ter 0

您可以通过将条件 1 和条件 2 包装在方法中并将它们用作委托来实现此目的,这允许将它们传递到方法中。

例如,您可以拥有带有委托签名的消息,期望一个接受 x 个输入并返回布尔值的方法。然后,您创建与条件 1 和 2 的签名相匹配的方法,并将适当的方法传递给该方法。

在方法内部,您只需调用委托,就像它是一个方法一样(实际上,它是一个方法)。

检查 Microsoft 有关委托的文档:http://msdn.microsoft.com/en-us/library/ms173171 (v=vs.80).aspx