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