#region -[ Readme fuzzelogic Solutions: CrunchedSpecification] /*** Created by Zak for Fuzzelogic Solutions www.fuzzelogicSolutions.com info@fuzzelogicSolutions.com */ #endregion using System; namespace FuzzelogicSolutions.Samples{ public interface Ispecification { bool is_satisfied_by(T this_item); } public class specification : Ispecification{ private readonly Predicate specification_predicate_test; public specification(Predicate specification_predicate_test){ this.specification_predicate_test = specification_predicate_test; } public bool is_satisfied_by(T this_item){ return specification_predicate_test(this_item); } } // put this into a seperate class public static class specification_extensions{ public static specification And(this specification first, Predicate secondPredicate) { return new specification(instance => first.is_satisfied_by(instance) && new specification(secondPredicate).is_satisfied_by(instance)); } public static specification OR(this specification first, Predicate secondPredicate) { return new specification(instance => first.is_satisfied_by(instance) || new specification(secondPredicate).is_satisfied_by(instance)); } public static specification Negate(this specification first) { return new specification(instance => !first.is_satisfied_by(instance)); } } }