title: .NET - Get default value for a reflected PropertyInfo
body: <p>This is really stumping me today. I'm sure its not that hard, but I have a System.Reflection.PropertyInfo object.  I want to set its value based on the result of a database lookup (think ORM, mapping a column back to a property).</p>
  
  <p>My problem is if the DB returned value is DBNull, I just want to set the property value to its default, the same as calling:</p>
  
  <pre><code>value = default(T);  // where T is the type of the property.
  </code></pre>
  
  <p>However, the default() method won't compile if you give it a Type, which is what I have:</p>
  
  <pre><code>object myObj = ???; // doesn't really matter. some arbitrary class.
  PropertyInfo myPropInf = ???; // the reflection data for a property on the myObj object.
  myPropInf.SetValue(myObj, default(myPropInf.PropertyType), null);
  </code></pre>
  
  <p>The above doesn't compile. default(Type) is invalid. I also thought about doing:</p>
  
  <pre><code>object myObj = ???;
  PropertyInfo myPropInf = ???;
  myPropInf.SetValue(myObj, Activator.CreateInstance(myPropInf.PropertyType), null);
  </code></pre>
  
  <p>However, if the Type is string, that would assign the value "new String()", but I really want "null", which is what "default(string)" would return.</p>
  
  <p>So what am I missing here?
  I suppose a really hacky way would be to create a new instance of myObj's Type and copy the property over, but that just seems stupid...</p>
  
  <pre><code>object myObj = ???;
  PropertyInfo  myPropInf = ???;
  var blank = Activator.CreateInstance(myObj.GetType());
  object defaultValue = myPropInf.GetValue(blank, null);
  myPropInf.SetValue(myObj, defaultValue, null);
  </code></pre>
  
  <p>I'd rather not waste the memory to make a whole new instance, just to get the default for the property though. Seems very wasteful.</p>
  
  <p>Any ideas?</p>