Quiero crear una instancia de un tipo que especifique en un método genérico que tengo. Este tipo tiene varios 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 forma de hacerlo?
c#
generics
createinstance
DaveDev
fuente
fuente
Respuestas:
Si.
fuente
Hay otra forma de pasar argumentos a CreateInstance a través de parámetros con nombre.
En base a eso, puede pasar una matriz hacia
CreateInstance
. Esto le permitirá tener 0 o múltiples argumentos.fuente
Sin embargo, tenga en cuenta 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 usando lambda precompilada. Por supuesto, el rendimiento siempre es subjetivo y depende claramente de cada caso si vale la pena o no.
Detalles sobre el problema en este artículo.
El gráfico se toma del artículo y representa el tiempo que se tarda en ms por cada 1000 llamadas.
fuente
Activator.CreateInstance
tomará0.0035ms
(o 3,5 microsegundos); dependiendo de su aplicación, esto puede no registrarse en las pruebas de rendimiento.Como alternativa a Activator.CreateInstance, FastObjectFactory en la url vinculada tiene mejores formas que Activator (a partir de .NET 4.0 y significativamente mejor que .NET 3.5. No se realizaron pruebas / estadísticas con .NET 4.5). Vea la publicación de StackOverflow para estadísticas, información y código:
¿Cómo pasar args ctor en Activator.CreateInstance o usar IL?
fuente
fuente