首页 > 解决方案 > Func<> 作为函数的可选参数必须是编译时间常数吗?

问题描述

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

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

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

标签: c#

解决方案


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

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

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

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

这看起来像这样:

eval ??= _ => true;


推荐阅读