Commit 3703a03

mo k <mo@mokhan.ca>
2012-04-26 19:12:54
extract Collect extension into a Collectable<T> class.
1 parent 75e59c1
Changed files (1)
src
domain
src/domain/utility/IVisitor.cs
@@ -27,6 +27,26 @@ namespace utility
     }
 
     public static IEnumerable<T> Collect<T>( this IVisitable<T> visitable, Func<T, bool> predicate)
+    {
+      return new Collectable<T>(predicate).CollectFrom(visitable);
+    }
+  }
+
+  public interface ICollectable<T>
+  {
+    IEnumerable<T> CollectFrom(IVisitable<T> visitable);
+  }
+
+  public class Collectable<T> : ICollectable<T>
+  {
+    Func<T, bool> predicate;
+
+    public Collectable(Func<T, bool> predicate) 
+    {
+      this.predicate = predicate;
+    }
+
+    public IEnumerable<T> CollectFrom(IVisitable<T> visitable)
     {
       var results = new List<T>();
       visitable.Accept(new AnonymousVisitor<T>(item =>