Si vous avez le paramètre de type générique, puis Jeff Bridgman la réponse est la meilleure.
Si vous avez seulement un objet de Type représente le type que vous voulez construire, vous pouvez utiliser Activator.CreateInstance(Type)
comme Alex Lyman suggéré, mais on m'a dit qu'il est lent (je n'ai pas profilé personnellement).
Toutefois, si vous trouvez vous-même la construction de ces objets, très souvent, il est plus éloquent, à l'aide compilé dynamiquement les Expressions Linq:
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();
}
}
Il suffit d'appeler le délégué est retourné à vous. Vous devriez cache ce délégué, car constamment en recompilant les expressions Linq peuvent être coûteux, mais si vous cache le délégué et le réutiliser à chaque fois, il peut être très rapide! Personnellement, j'utilise un statique de recherche dictionnaire indexé par type. Cette fonction est pratique lorsque vous traitez avec des objets sérialisés où vous ne pouvez connaître le Type de l'information.
NOTE: Cette opération peut échouer si le type n'est pas constructable ou ne possède pas de constructeur par défaut!