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。