strings are indeed a special case. They are a reference type but behave like value types. This was done for "simplicity's sakes" by the .Net development team.
Great quote:
It is a reference type
It's a common misconception that string is a value type. That's because its immutability (see next point) makes it act sort of like a value type. It actually acts like a normal reference type. See my articles on parameter passing and memory for more details of the differences between value types and reference types.
From: http://www.yoda.arachsys.com/csharp/strings.html