Being a contractor is a balancing act. There are some positives, but just as many negatives. One of the positives, is that you see an awful lot of code. Exposure to code you haven't written is a great way to learn. You can pick up some tricks, or just as likely, see an implementation that is really bad and you get a chance to think how you would do it better. Unfortunately, most contractors never get a chance to fix the problems with code. Permies can be threatened by contractors and don't like you messing with their code.
It's understandable. They don't know how good you are or aren't, so why let this new guy loose on their code.
Anyway, this is absoultely nothing to do with the topic of this post. I just wanted to elaborate that I have seen a lot of codebases over the years. A lot.
The overwhelming conclusion I have found recently is this: If your developers have come from a certain background, say C++ or VB, don't assume they are going to be great C# coders off the bat.
The biggest problem I see is people move away from C++ and VB and instead of understanding and learning C#, they just apply their language X knowledge to C#. What comes out is a hybrid mess of ugliness.
Code that is not quite OO, not quite procedural, not quite anything actually.
So, if you are a development shop looking to move to .Net: take time to actually learn the language. Don't just assume that it's C++ with a garabage collector, or VB with curly braces. It's a bit like assuming that French is just English with an accent, and a vague hint of garlic.