鉴于此私有方法:
private static IEnumerable<LedgerSummary> FilterLedgers(IList<LedgerSummary> ledgers, List<ExcludedLedgerAccount> excludedLedgerAccounts)
{
var excludedLedgerEntries = ledgers.Where(x => excludedLedgerAccounts.Any(y => y.LedgerAccount == x.LedgerAccount)).ToList();
var filteredLedgers = ledgers.Except(excludedLedgerEntries).ToList();
// do some more filtering
return filteredLedgers;
}
和这个:
private static IEnumerable<LedgerPosting> FilterLedgers(IList<LedgerPosting> ledgers, List<ExcludedLedgerAccount> excludedLedgerAccounts)
{
var excludedLedgerEntries = ledgers.Where(x => excludedLedgerAccounts.Any(y => y.LedgerAccount == x.DistributionAccountLedgerAccount)).ToList();
var filteredLedgers = ledgers.Except(excludedLedgerEntries).ToList();
// do some more filtering
return filteredLedgers;
}
重构它们的最佳方法是什么,这样我就不会在方法主体中重复本质上相同的逻辑?
之所以不那么简单(在我看来)是因为方法签名略有不同,因为一个人采用(并返回)一个 ' List
' 的LedgerSummary
s 和另一个LedgerPostings
s,并且每个都有不同的属性名称(映射到中的相同性质ExcludedLedgerAccount
)。
不幸的是,我不能更改这两个类中的任何一个的属性或使用一个通用接口,例如,因为会延长这个讨论的原因!
我知道答案非常简单(所以我提前道歉)但我现在似乎遇到了程序员的障碍。