第一次问我:)
我需要一些方法来使用格式
上的泛型来定义默认谓词Func<T, bool>
然后将其用作默认参数。像这样:
public bool Broadcast(byte command, MemoryStream data, bool async, Func<T, bool> predicate = (T t) => true)
当我这样做时,我得到了编译错误:
'predicate'的默认参数值必须是编译时常量
是否有一种顺利的方法可以解决这个问题,或者是否应该使谓词函数可以为空并相应地更改我的函数逻辑?
谢谢,
答案 0 :(得分: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) {
// ...
}
此外,mscorlib中有一个特定的Predicate<T>
委托,您可以使用它。它与Func<T, bool>
具有相同的签名,但它明确地将其标记为委托,该委托决定是否对T
的实例执行操作
答案 1 :(得分:3)
为没有最后一个参数的广播设置重载。
答案 2 :(得分:2)
试试这个:
public bool Broadcast(byte command, MemoryStream data, bool async, Func<T, bool> predicate = default(Func<T, bool>))
但我认为你必须检查谓词!= null。