Si tiene el parámetro de tipo genérico, la respuesta de Jeff Bridgman es la mejor. Si solo tiene un objeto Type que represente el tipo que desea construir, podría usar Activator.CreateInstance(Type)
como sugirió Alex Lyman, pero me han dicho que es lento (aunque no lo he hecho personalmente).
Sin embargo, si usted se encuentra la construcción de estos objetos con mucha frecuencia, hay un enfoque más elocuente el uso de expresiones LINQ dinámica compilados:
using System;
using System.Linq.Expressions;
public static class TypeHelper
{
public static Func<object> CreateDefaultConstructor(Type type)
{
NewExpression newExp = Expression.New(type);
// Create a new lambda expression with the NewExpression as the body.
var lambda = Expression.Lambda<Func<object>>(newExp);
// Compile our new lambda expression.
return lambda.Compile();
}
}
Sólo tiene que llamar al delegado devuelto. Debería almacenar en caché este delegado, porque la recompilación constante de las expresiones de Linq puede ser costosa, pero si guarda en caché el delegado y lo vuelve a usar cada vez, ¡puede ser muy rápido! Yo personalmente uso un diccionario de búsqueda estático indexado por tipo. Esta función es útil cuando se trata de objetos serializados donde solo se puede conocer la información del Tipo.
NOTA: ¡Esto puede fallar si el tipo no es construible o no tiene un constructor predeterminado!
miembros estáticos que simplemente nunca miras ... esto es increíble. –
Los miembros privados tampoco se miran.Asumiendo que solo necesita público, este parece ser el más simple. Sin embargo, ¿es el más rápido? Estoy trabajando en una prueba ahora mismo para averiguarlo. –
Después de medir este enfoque frente a mi enfoque usando MeasureIt (http://msdn.microsoft.com/en-us/magazine/cc500596.aspx), este enfoque es más rápido en todos los casos, excepto en los más simples, y aun así es apenas más lento. Entonces este es el más simple y el más rápido. ¡Gracias! –