type new how from example c# generics createinstance

c# - how - new typeof



Cómo pasar parámetros a Activator.CreateInstance<T>() (4)

Quiero crear una instancia de un tipo que especifique en un método genérico que tengo. Este tipo tiene un número de constructores sobrecargados. Me gustaría poder pasar argumentos a los constructores, pero

Activator.CreateInstance<T>()

No ve tener esto como una opción.

¿Hay otra manera de hacerlo?


Como alternativa a Activator.CreateInstance, FastObjectFactory en las preformas de URL vinculadas es mejor que Activator (a partir de .NET 4.0 y significativamente mejor que .NET 3.5. No se realizan pruebas / estadísticas con .NET 4.5). Vea la publicación de para estadísticas, información y código:

¿Cómo pasar ctor args en Activator.CreateInstance o usar IL?


Hay otra forma de pasar argumentos a CreateInstance a través de parámetros nombrados.

Basado en eso, puedes pasar una matriz hacia CreateInstance . Esto te permitirá tener 0 o múltiples argumentos.

public T CreateInstance<T>(params object[] paramArray) { return (T)Activator.CreateInstance(typeof(T), args:paramArray); }


Tenga en cuenta, sin embargo, que pasar argumentos en Activator.CreateInstance tiene una diferencia de rendimiento significativa en comparación con la creación sin parámetros.

Hay mejores alternativas para crear objetos dinámicamente utilizando lambda precompilada. Por supuesto, siempre el rendimiento es subjetivo y depende claramente de cada caso si vale la pena o no.

Detalles sobre el tema en este artículo.

El gráfico se toma del artículo y representa el tiempo tomado en ms por 1000 llamadas.


Yes.

(T)Activator.CreateInstance(typeof(T), param1, param2);