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

时间:2012-12-10 16:51:31

标签: c# .net functional-programming func

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

Func<int,bool> tryMethodFunc = TryMethod;

TryMethod的签名如下:

bool TryMethod(int value, int value2 = 0, double value3 = 100.0)

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

1 个答案:

答案 0 :(得分:8)

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

请看下面这段简单的代码,

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

    public bool TestMethod(int a, int b = 8)
    {
        return true;
    }

当您反汇编这些方法时,您会看到C#编译器实际上将带有一个参数的TestMethod调用替换为具有这两个参数的调用。来自ildasm的屏幕截图证明了这一点,

ildasm screen shot

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

Func 的目的是提供一种以通用且简单的方式存储匿名方法的方法。reference

可以找到stackoverflow中的另一个类似问题here

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