edward_freedom, а что именно не так в коде по ссылке? Он вполне рабочий, делает ровно то, что от него требовалось, покрыт тестами, и в принципе не нарушает каких-то общепринятых вещей.
Самое большое зло - то что он реализован на листах, а не на ienumerable, и что имя параметра не очень.