Primitives and string (often used along with primitives) implement the IComparable interface. By exploiting this little factor we can get default values for such types in a few lines of code. For example, the sample code below will return false when GetDefaultValue<bool>() is executed, it will return <Null> when GetDefaultValue<string>() is executed, it will return 1/1/0001 when GetDefaultValue<DateTime>() is executed, etc.
private T GetDefaultValue<T>() where T : IComparable
{
IComparable defaultValue = default(T);
if (defaultValue == null)
return (T)(IComparable)"<Null>";
return (T)defaultValue;
}