how to get the default value of a type if the type is only known as System.Type?

Patrick Klug picture Patrick Klug · Aug 15, 2009 · Viewed 14k times · Source

If I want a method that returns the default value of a given type and the method is generic I can return a default value like so:

public static T GetDefaultValue()
{
  return default(T);
}

Can I do something similar in case I have the type only as a System.Type object?

public static object GetDefaultValue(Type type)
{
  //???
}

Answer

Mark Brackett picture Mark Brackett · Aug 15, 2009

Since you really only have to worry about value types (reference types will just be null), you can use Activator.CreateInstance to call the default constructor on them.

public static object GetDefaultValue(Type type) {
   return type.IsValueType ? Activator.CreateInstance(type) : null;
}

Edit: Jon is (of course) correct. IsClass isn't exhaustive enough - it returns False if type is an interface.