title: C# Generics: Reference types vs. Value Types
body: <p><em>I've faced a lot of confusion with regards to differences between generic reference types vs. generic value types whilst writing my API.</em>  </p>
  
  <p>What are the differences with regards to constraints and functionalities (most important/easily overlooked) between the two?</p>
  
  <pre><code>class ReferenceGeneric &lt;T&gt; where ???
  {
  
  }
  </code></pre>
  
  <p>and </p>
  
  <pre><code>struct ValueGeneric &lt;T&gt;: where ???
  {
  
  }
  </code></pre>
  
  <p><strong>Edit #1</strong> Just to clarify the question and what I am after: I want to know what you can do with Generic reference types AND cannot do with generic value types (and vice versa)</p>
  
  <p><strong>Edit #2</strong> Further clarifications: How can T be constrained if generic type is reference or value type? Are there differences as to how each type can be constrained?</p>