main
 1namespace domain
 2{
 3  using System;
 4  using System.Linq;
 5  using System.Collections.Generic;
 6  using utility;
 7
 8  public class TypeCurve : IVisitable<Production>
 9  {
10    IEnumerable<Production> production;
11
12    protected TypeCurve() { }
13
14    public TypeCurve(IEnumerable<Production> production)
15    {
16      this.production = production.ToList();
17    }
18
19    public IQuantity ProductionFor<Commodity>(Month month) where Commodity : ICommodity, new()
20    {
21      return production.Single(x => x.IsFor(month)).ProductionOf<Commodity>();
22    }
23
24    public virtual void Accept(Action<Production> visitor)
25    {
26      this.production.Each(x => 
27      {
28        visitor(x);
29      });
30    }
31
32    public virtual void Accept(IVisitor<Production> visitor)
33    {
34      Accept(visitor.Visit);
35    }
36  }
37}