How to refactor lots of overloaded methods more smartly? - C#