Reading the original question, I think it shouldn't be a goal itself to get rid of if statements. I would say the goal is that your program delivers x, with y performance (and maybe keeping your code readable). If removing the if statement(s) visibly contributes to this goal, go for it. If it doesn't, it sounds like a waste of time (and possibly premature optimization).
I believe it all depends on what your goal is.
If you go indie, there's one choice: just do it.
If you're going for a job at a (AAA) studio, I'd suggest you come up with something that jumps of the page (not necessary on the looks of the output, can also be the way your code is setup or the algorithm you created etc.)
From your post I assume for now you're going indie, in that case you could set a goal (game) which includes both what you achieved earlier but with added features you want to learn.
Hi. Your plan sounds achievable if you ask me.
On the long term you might benefit (or not) from the language you choose. I'd prefer c++ because in the end I believe you have more control/ lower level. But when you're starting c# should be fine to start with. For both languages several API's/libraries are available for say rendering or math, so you dont have to do eveything yourself (right away).
Not 100% sure if I read it correctly, but you could have something like this in your case:
Class building (derived from object)
Class world or level, having a vector of buildings etc
Class material (includes texture etc)
Helper class including texture loading function etc.
Class renderer, which can take a world (or to be exact the parts of the world to be rendered).
The world->load function can load everything, the update function can call update functions for its members. Then your world would contain x materials and buildings, which have a reference/ id to the world (or level's) material. This way you're still reusing textures buth with a more clear/ less 'GOD class' hierarchy.