13

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

Func<int,bool> tryMethodFunc = TryMethod;

TryMethod 的签名如下:

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

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

4

1 回答 1

8

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

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

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

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

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

ildasm 屏幕截图

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

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

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

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

于 2012-12-10T19:52:36.723 回答