具有预设参数的 C# 委托

C# delegate with pre-set parameters

我需要用命令模式做一些类似的事情,但在委托或类似的方面。

它应该是这样的:

private MyFunc Method1() {
    MyFunc func;
    
    /*
        set all parameters to func
    */  
    
    return func;
}

private void Method2()
{
    var funcWithAllParameters = Method1();
    funcWithAllParameters.Invoke();
}

private MyFunc(a lot of parameters) {}

您可以使用 lambda 函数执行此操作,该函数为 MyFunc 提供参数并调用 MyFunc。结果是 Action 委托,其签名为 void ()

private Action Method1() {
    return () => MyFunc(new Type1(), null);
}

private void Method2()
{
    var funcWithAllParameters = Method1();
    funcWithAllParameters.Invoke();
}

private void MyFunc(Type1 p1, Type2 p2)
{
    //
}

dotnetfiddle

您可以像这样将值放入闭包中:

private Func<TResult> Method1()
     => () =>  MyFunc(/*a lot of parameters*/"param1", 12, ...);

因此您可以在闭包中加载参数,然后使用函数:

var func = Method1();
var result = func();

当然你也可以将该函数作为其他函数的参数:

private TResult SomeOtherMethod(Func<TResult> functionWithSetParameters)
    => functionWithSetParameters();