泛型谓词的默认值作为参数
Posted
技术标签:
【中文标题】泛型谓词的默认值作为参数【英文标题】:Default value on generic predicate as argument 【发布时间】:2011-06-15 19:52:21 【问题描述】:第一次问我问题:)
我需要一些方法来使用格式上的泛型来定义默认谓词
Func<T, bool>
然后将其用作默认参数。像这样的:
public bool Broadcast(byte command, MemoryStream data, bool async, Func<T, bool> predicate = (T t) => true)
当我这样做时,我得到了编译错误:
'predicate' 的默认参数值必须是编译时常量
是否有一种我缺少的平滑方法,或者是否应该使谓词函数为空并相应地更改我的函数逻辑?
谢谢,
【问题讨论】:
【参考方案1】:试试这个:
public bool Broadcast(byte command, MemoryStream data, bool async, Func<T, bool> predicate = default(Func<T, bool>))
但我认为您必须检查谓词!=null。
【讨论】:
在这种情况下我还不如做 public bool Broadcast(byte command, MemoryStream data, bool async, Func方法参数的默认值必须是编译时常量,因为默认值实际上是由编译器复制到方法的所有调用点。
您必须使用重载来执行此操作:
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
的实例执行操作
【讨论】:
我会用这个来获取关于谓词的额外信息为不接受最后一个参数的广播创建一个重载。
【讨论】:
以上是关于泛型谓词的默认值作为参数的主要内容,如果未能解决你的问题,请参考以下文章