Equivalente programático de default(Type)

Resuelto tags2k asked hace 15 años • 16 respuestas

Estoy usando la reflexión para recorrer Typelas propiedades de a y establecer ciertos tipos en sus valores predeterminados. Ahora, podría cambiar el tipo y configurarlo default(Type)explícitamente, pero prefiero hacerlo en una sola línea. ¿Existe un equivalente programático del default?

tags2k avatar Nov 28 '08 17:11 tags2k
Aceptado
  • En el caso de un tipo de valor, utilice Activator.CreateInstance y debería funcionar bien.
  • Cuando utilice el tipo de referencia, simplemente devuelva nulo
public static object GetDefault(Type type)
{
   if(type.IsValueType)
   {
      return Activator.CreateInstance(type);
   }
   return null;
}

En la versión más reciente de .net, como el estándar .net, type.IsValueTypedebe escribirse comotype.GetTypeInfo().IsValueType

Dror Helper avatar Dec 09 '2008 15:12 Dror Helper

¿Por qué no llamar al método que devuelve default(T) con reflexión? Puedes usar GetDefault de cualquier tipo con:

    public object GetDefault(Type t)
    {
        return this.GetType().GetMethod("GetDefaultGeneric").MakeGenericMethod(t).Invoke(this, null);
    }

    public T GetDefaultGeneric<T>()
    {
        return default(T);
    }
Drakarah avatar Nov 05 '2011 19:11 Drakarah