generics谓词的默认值作为参数

第一次问我:)

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

Func 

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

 public bool Broadcast(byte command, MemoryStream data, bool async, Func predicate = (T t) => true) 

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

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

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

谢谢,

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

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

 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 predicate) { // ... } 

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

对没有采用最后一个参数的Broadcast进行重载。

试试这个:

 public bool Broadcast(byte command, MemoryStream data, bool async, Func predicate = default(Func)) 

但我认为你必须检查谓词!= null。