2010-04-21 24 views
21

Duplicar posibles:
Default value of a typeEn .NET, en tiempo de ejecución: ¿Cómo obtener el valor predeterminado de un tipo de un objeto Type?

En C#, para obtener el valor por defecto de un tipo, puedo escribir ...

var DefaultValue = default(bool);` 

Pero, cómo llegar el mismo valor predeterminado para una variable Tipo suministrada?

public object GetDefaultValue(Type ObjectType) 
{ 
    return Type.GetDefaultValue(); // This is what I need 
} 

O, en otras palabras, ¿cuál es la implementación de la palabra clave "predeterminada"?

+0

Esto es prácticamente duplicado de ["Valor predeterminado de un tipo"] (http://stackoverflow.com/questions/2490244/default-value-of-a-type). Codeka da una buena [respuesta] (http://stackoverflow.com/questions/2490244/default-value-of-a-type/2490274#2490274) que creo que te ayudará. –

+0

return default (ObjectType) no funciona? –

Respuesta

35

creo que la función de Frederik de hecho, debería tener este aspecto:

public object GetDefaultValue(Type t) 
{ 
    if (t.IsValueType) 
    { 
     return Activator.CreateInstance(t); 
    } 
    else 
    { 
     return null; 
    } 
} 
+0

eso es! Lo probé con struct, enum, value y tipos de referencia y funciona bastante bien. gracias! –

13

probablemente debería excluir el caso Nullable<T> también, para reducir algunos ciclos de CPU:

public object GetDefaultValue(Type t) { 
    if (t.IsValueType && Nullable.GetUnderlyingType(t) == null) { 
     return Activator.CreateInstance(t); 
    } else { 
     return null; 
    } 
} 
+1

Está optimizando para Nullables a costa de los tipos que no admiten valores NULL. – 0xF

Cuestiones relacionadas