このプライベートメソッドを考えると:
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;
}
メソッド本体で本質的に同じロジックを繰り返さないように、それらをリファクタリングするための最良の方法は何ですか?
(私の考えでは)それほど単純ではない理由は、メソッドのシグネチャが、 sと他のsの' List
'を取得(および返す)する点でわずかに異なり、これらのそれぞれが異なるプロパティ名を持っているためです(の同じプロパティ。LedgerSummary
LedgerPostings
ExcludedLedgerAccount
残念ながら、たとえば、この談話が長くなる理由で、これら2つのクラスのいずれかのプロパティを変更したり、共通のインターフェイスを使用したりすることはできません。
私は答えが本当に簡単であることを知っています(それで私は前もって謝罪します)が、私はその瞬間にプログラマーのブロックを持っているようです。