title: "Primitive types" versus "built-in value types"
body: <p>I recently caught an exception in C# while using the Array.SetValue(Int32) method. The exception was:</p>
  
  <blockquote>
    <p>Cannot widen from source type to target type either because the source
    type is a not a primitive type or the conversion cannot be
    accomplished.</p>
  </blockquote>
  
  <p>The reference to the word "primitive" surprised me a bit because I thought the tendency was to refer to these types as built-in types, also that the term "primitive type" was an informal term. What is the difference between "primitive" types and "built-in value types"? I don't find a definition of primitive types in the C# language specification.</p>