【发布时间】:2011-04-01 01:24:09
【问题描述】:
我正在尝试在我的领域层中做一个规范模式的简单实现。
如果我有一个充满这样规范的静态类:
public static class FooSpecifications
{
public static Func<Foo, bool> IsSuperhuman
{
get
{
return foo => foo.CanShootLasersOutOfItsEyes && foo.CanFly;
}
}
}
然后我可以做这样奇妙的事情:
IEnumerable<Foo> foos = GetAllMyFoos();
var superFoos = foos.Where(FooSpecifications.IsSuperhuman);
我还可以向 Foo 添加 bool 方法来确定特定实例是否符合规范:
public bool Meets(Func<Foo, bool> specification)
{
return specification.Invoke(this);
}
鉴于 Foo 和我所有的域实体一样扩展了 DomainObject,有没有办法可以将 Meets() 的通用实现放入 DomainObject 中,以节省我在每个实体中分别实现 Meets()?
【问题讨论】:
-
提示:您可以使用 Predicate
代替 Func 。 -
@Paul:可以,但是框架的最新版本,尤其是 LINQ 的趋势是使用
Func<T,bool>而不是Predicate<T>。 -
@LukeH:有趣,不知道这个(显然)谢谢。
标签: c# functional-programming base-class generics