C# 将具有默认值的方法指定给Func<&燃气轮机;没有这些参数?

C# 将具有默认值的方法指定给Func<&燃气轮机;没有这些参数?,c#,.net,functional-programming,func,C#,.net,Functional Programming,Func,我希望能够做到以下几点: Func<int,bool> tryMethodFunc = TryMethod; 我不反对将方法分解为一种咖喱格式,但如果没有这种格式,那将需要更多的工作。可选参数是一种语言功能,编译器负责将对带有可选参数的方法的调用转换为带有值的完整调用 看看下面这段简单的代码 public void GeneralMethod() { TestMethod(6); } public bool TestMethod(i

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

Func<int,bool> tryMethodFunc = TryMethod;

我不反对将方法分解为一种咖喱格式,但如果没有这种格式,那将需要更多的工作。

可选参数是一种语言功能,编译器负责将对带有可选参数的方法的调用转换为带有值的完整调用

看看下面这段简单的代码

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

    public bool TestMethod(int a, int b = 8)
    {
        return true;
    }
当您反汇编这些方法时,您将看到C#编译器实际上用一个参数替换了对TestMethod的调用,而用两个参数替换了对TestMethod的调用。ildasm的屏幕截图证明

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

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

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


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

据我所知,具有
Func tryMethodFunc=>(value)=>TryMethod(value)
还不够吗?嗯,这确实有效。我想我只是刚刚接触函数方法。你可以把它作为一个答案,我来标记。请随意标记凯恩的答案;它非常全面,包含了我的解决方法。可能重复的@ChrisSinclair:KeYan的答案似乎被删除了。。。
    public void GeneralMethod()
    {
        TestMethod(6);
    }

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