title: Determine if reflected property can be assigned null
body: <p>I wish to automagically discover some information on a provided class to do something akin to form entry. Specifically I am using reflection to return a PropertyInfo value for each property. I can read or write values to each property from my "form", but if the property is defined as "int", I would not be able to, and my program should not even try, to write a null value.</p>
  
  <p>How can I use reflection to determine if a given property can be assigned a null value, without writing a switch statement to check for every possible type? In particular I want to detect the difference between boxed types like "int" vs. "int?", since in the second case I <em>do</em> want to be able to write a null value. The IsValueType and IsByRef don't seem to see a difference.</p>
  
  <pre><code>public class MyClass
  {
      // Should tell me I cannot assign a null
      public int Age {get; set;} 
      public DateTime BirthDate {get; set;}
      public MyStateEnum State {get; set;}
      public MyCCStruct CreditCard {get; set;}
  
      // Should tell me I can assign a null
      public DateTime? DateOfDeath {get; set;}
      public MyFamilyClass Famly {get; set;}
  }
  </code></pre>
  
  <p>Note that I need to determine this information long before I actually attempt to write the value, so using exception handling wrapped around SetValue is not an option.</p>