public static bool IsReferenceType(IType type)
{
var gp = type as IGenericParameter;
if (null == gp)
return !type.IsValueType;
if (gp.IsClass)
return true;
foreach (IType tc in gp.GetTypeConstraints())
if (!tc.IsValueType && !tc.IsInterface)
return true;
return false;
}