public bool Evaluate(ReadOnlyDictionary <string, string[]> properties) { return(Negate ^ ((Conjunctions != null ? Conjunctions.Any(c => c.Evaluate(properties)) : false) || (Disjunctions != null ? Disjunctions.Any(d => d.Evaluate(properties)) : false) || (Propositions != null ? Propositions.Any(p => p.Evaluate(properties)) : false))); }