I recommend at least looking at the LINQOverC# project hosted on codeproject.com.
URL: http://www.codeplex.com/LinqOverCSharp
There are some (minor?) known issues, and it hasn't been updated since Jan 2008 (which could be a pretty big issue), but the source code for a (fast, and 100% .Net) C# 3.0 parser is there for the taking.
My favorite things about this parser:
It can load a Visual Studio project file (csproj) pretty much out of the box, and parse the whole shebang (including assembly references).
You can query, enumerate, filter, etc, the parsed object model (tree) using LINQ. Which it makes it almost trivial to traverse up and down and all around whatever you're parsing.
Here's a sample LINQ query for finding a variable or parameter in a method, where the variable's name = VariableName:
variable = (from v in method.Variables
where string.Compare(v.Name, VariableName, false) == 0
select v as LanguageElement).Union(
from p in method.FormalParameters
where string.Compare(p.Name, VariableName, false) == 0
select p as LanguageElement).FirstOrDefault();