我的一位开发人员朋友告诉我,使用委托的循环要快得多,我想对它进行基准测试,但我在连接它的工作原理时遇到了麻烦。
考虑以下余额计算器。这基本上需要一个账户列表,如果存在则将初始值(起始余额)添加到总贷方值(如果存在)并减去每个账户的总借方值:
private static IDictionary<string, decimal> CalculateBalances(
IDictionary<string, decimal> initialValue,
IDictionary<string, decimal> credits,
IDictionary<string, decimal> debits)
{
var r = new Dictionary<string, decimal>();
foreach (var key in initialValue.Select(k => k.Key)
.Concat(credits.Select(k => k.Key))
.Concat(debits.Select(k => k.Key))
.Distinct())
{
r.Add(key,
(initialValue.ContainsKey(key) ? initialValue[key] : 0M)
+ (credits.ContainsKey(key) ? credits[key] : 0M)
- (debits.ContainsKey(key) ? debits[key] : 0M)
);
}
return r;
}
这在中小型帐户列表上相当有效,但使用委托会更快吗?坦率地说,委托逻辑似乎与我的思维过程成直角运行,因为我正在摸索如何写这个。
任何人都可以提供一种使用委托重写它的方法吗?