There are two MSDN articles (here and here) about design guidelines that also contain naming conventions. Too bad they are restricted to "publically visible" things. They don't offer guidelines for naming non-public things and as far as I know Microsoft doesn't provide official naming guidelines for non-publics.
StyleCop (a Microsoft tool) is against using underscores in names. Two reasons I have heard from developers why they prefer to use the underscore:
- it clearly marks non-public members (type _ and intellisense will show you all the non-publics).
- it prevents conflicts between local variables (which are often also written in camelCase), method parameters and non-public fields.
IMO both are a good reason to use the underscore, however I don't like how it makes my code look so I don't use it either. I prefer to use only camelCase when possible and I add a this.
in case of conflicts with local variables or method parameters.
We simply try to keep the coding style consistent within the team and project.