泛型谓词的默认值作为参数

Bak*_*ery 21 c# arguments predicate default-value

第一次问我:)

我需要一些方法来定义使用格式的泛型的默认谓词

Func<T, bool>
Run Code Online (Sandbox Code Playgroud)

然后将其用作默认参数.像这样的东西:

public bool Broadcast(byte command, MemoryStream data, bool async, Func<T, bool> predicate = (T t) => true)
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我得到编译错误:

'predicate'的默认参数值必须是编译时常量

有没有一种顺利的方法可以做到这一点,我缺少或应该使谓词函数可以为空并相应地改变我的函数逻辑?

谢谢,

the*_*oop 26

方法参数的默认值必须是编译时常量,因为默认值实际上是由编译器复制到方法的所有调用站点.

您必须使用重载来执行此操作:

public bool Broadcast(byte command, MemoryStream data, bool async) {
    return Broadcast(command, data, async, t => true);
}

public bool Broadcast(byte command, MemoryStream data, bool async, Func<T, bool> predicate) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

此外,Predicate<T>mscorlib中有一个特定的委托,您可以使用它.它与签名相同Func<T, bool>,但它明确地将其标记为委托,该委托决定是否对其实例执行操作T