With the exception of the valuetypes that are used directly by the runtime and various others for PInvoke purposes, you should only use valuetypes in 2 scenarios.
When you need copy semantics.
When you need automatic initialization, normally in arrays of these types.