If you're working in .NET, save yourself some time and take a look at this library. I recently had to parse some shapefiles and it saved me a lot of time.
I did have to add an implementation of the PolygonZ shape type to the library, but that was pretty trivial, the ESRI shapefile specs aren't too hard to figure out.