/// <summary>
 ///     Bit nasty, for use only by <see cref="IFacetHolder" />s that index their <see cref="IFacet" />s
 ///     in a <see cref="Dictionary{TKey,TValue}" />.
 /// </summary>
 public static IFacet[] GetFacets(IDictionary<Type, IFacet> facetsByClass, IFacetFilter filter) {
     var filteredFacets = new List<IFacet>();
     foreach (IFacet facet in facetsByClass.Values) {
         if (filter.Accept(facet)) {
             filteredFacets.Add(facet);
         }
     }
     return filteredFacets.ToArray();
 }
 public static IFacet[] GetFacets(IFacet facet, IFacetFilter filter) {
     if (filter.Accept(facet)) {
         return new[] {facet};
     }
     return new IFacet[] {};
 }
 public AndFilter(IFacetFilter f1, IFacetFilter f2) {
     this.f1 = f1;
     this.f2 = f2;
 }
 public override IFacet[] GetFacets(IFacetFilter filter) {
     return nakedObjectActionPeer.GetFacets(filter);
 }
 public static IFacetFilter Not(IFacetFilter f1) {
     return new NotFilter(f1);
 }
 public static IFacetFilter Or(IFacetFilter f1, IFacetFilter f2) {
     return new OrFilter(f1, f2);
 }
 public static IFacetFilter And(IFacetFilter f1, IFacetFilter f2) {
     return new AndFilter(f1, f2);
 }
 static FacetFilters() {
     TRUE = new TrueFilter();
     FALSE = new FalseFilter();
 }
 public NotFilter(IFacetFilter f1) {
     this.f1 = f1;
 }