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}