现在有很多使用Lambda实现的流畅(Fluent)接口,可以完成非常优雅的操作。我想理解它的原理以便开始创建一些这样的东西,但是我还没有找到我的大脑能够理解的解释。
考虑这个简单的人员验证器(Person Validator)的例子。
public class PersonValidator : IValidator<Person>
{
public PersonValidator()
{
AddRule(p => p.FirstName).CannotBeNull().CannotBeBlank();
AddRule(p => p.LastName).CannotBeNull().CannotBeBlank();
}
public List<ValidationResult> Validate(Person p)
{
// pseudo...
apply all rules specified in constructor, return results
}
}
我已经成功地使用我的验证器上的一种方法来部分或全部完成了这个工作...
public ValidationResult<T,TProp> AddRule<T,TProp>(Func<T,TProp> property)
{
... not sure what to do here. This method gives me the ability to use the lambda
... for specifying which properties i want to validate
}
我可以创建扩展方法,以扩展IValidator的CannotBeNull和CannotBeEmpty功能。因此,我似乎解决了问题的前半部分和后半部分,但我不确定如何将它们结合起来。希望能够得到一个有意义的解释...我想要“明白”。 :)