将具有默认值的方法分配给没有这些参数的Func <>?

Fir*_*and 13 .net c# functional-programming func

我希望能够做到以下几点:

Func<int,bool> tryMethodFunc = TryMethod;
Run Code Online (Sandbox Code Playgroud)

TryMethod的签名如下:

bool TryMethod(int value, int value2 = 0, double value3 = 100.0)
Run Code Online (Sandbox Code Playgroud)

我并不反对将方法分解为一种curry格式,但如果没有这种方法可以做到这一点,那将会更有效.

hum*_*ner 8

可选参数是一种语言功能,编译器负责将具有可选参数的方法的调用转换为使用值进行完全调用.

看下面这段简单的代码,

    public void GeneralMethod()
    {
        TestMethod(6);
    }

    public bool TestMethod(int a, int b = 8)
    {
        return true;
    }
Run Code Online (Sandbox Code Playgroud)

当您反汇编这些方法时,您会看到C#编译器实际上用一个参数替换了对TestMethod的调用,并且调用了两个参数.来自ildasm的屏幕截图证明,

ildasm屏幕截图

现在,来到当前的问题,有问题的代码行试图将Func与具有可选参数的方法绑定.如果C#编译器必须处理这个问题,它必须确保Func有些人知道默认值.虽然这可以通过编译器实现,但它完全违背了Func的目的.

Func的目的是提供一种以通用和简单的方式存储匿名方法的方法." 参考

stackoverflow中的另一个类似问题可以在这里找到

@Chris Sinclair的解决方案通过创建一个匿名方法来解决这个问题,该方法接受一个参数并从这个匿名方法的主体调用TryMethod.