public IEnumerable<Money> Eject(CashFlow inCash, ReservedMoney inReservedMoney) { try { if (inCash.UsedAmount == 0) { return inCash.RecevedMoney.ToList(); } var received = inCash.RecevedMoney .GroupBy(m => m) .ToDictionary(g => g.Key, g => g.Count()) ; var result = new List<KeyValuePair<Money, int>>(); this.EjectCore( inCash.ChangedAount, inReservedMoney.Items.OrderByDescending(pair => pair.Key.Value()), (m, totalCount, useCount) => { result.Add( new KeyValuePair<Money, int>(m, (int)useCount) ); } ); return result.SelectMany(r => Enumerable.Repeat(r.Key, r.Value)); } finally { inCash.RecevedMoney.Clear(); } }
private ReservedMoney InitInfinityReservedChange() { var result = new ReservedMoney (); foreach (var m in Enum.GetValues(typeof(Money)).Cast<Money>().Where (m => m != Money.Unknown)) { result.Items[m] = 10000; } return result; }