Func<> 作为函数的可选参数必须是编译时常量吗?

krj*_*rjw 4 c#

所以我有以下功能。我希望它有一个标准的参数值,但我无法让它工作,因为它需要是一个编译时常量。我知道我可以将它设置为 null 但我希望它是一个特定的功能。

    private void func(Func<List<int>, bool> eval = _ => true)
    {
        var b = eval();
    }

Run Code Online (Sandbox Code Playgroud)

甚至有可能做这样的事情吗?

Jon*_*ase 5

由于默认参数必须是编译时常量,因此您无法像您想要的那样提供简单的默认函数。不过,您可以使用您指出的 null 来解决此问题。

private void func(Func<List<int>, bool> eval = null)
{
    eval = eval ?? (_ => true);
    // Do things.
}
Run Code Online (Sandbox Code Playgroud)

如果传递 null 或在没有任何参数的情况下调用函数,这将分配您的默认实现。

在现代版本的 C# 中,您可以使用空赋值运算符??=.

这看起来像这样:

eval ??= _ => true;