Je veux créer une instance d'un type que je spécifie dans une méthode générique que j'ai. Ce type a un certain nombre de constructeurs surchargés. J'aimerais pouvoir passer des arguments aux constructeurs, mais
Activator.CreateInstance<T>()
ne voit pas cela comme une option.
Y a-t-il une autre façon de procéder?
c#
generics
createinstance
DaveDev
la source
la source
Réponses:
Oui.
la source
Il existe une autre façon de passer des arguments à CreateInstance via des paramètres nommés.
Sur cette base, vous pouvez transmettre un tableau vers
CreateInstance
. Cela vous permettra d'avoir 0 ou plusieurs arguments.la source
Gardez à l'esprit que le fait de passer des arguments sur Activator.CreateInstance a une différence de performances significative par rapport à la création sans paramètre.
Il existe de meilleures alternatives pour créer dynamiquement des objets à l'aide de lambda précompilé. Bien sûr, les performances sont toujours subjectives et cela dépend clairement de chaque cas, que cela en vaille la peine ou non.
Détails sur le problème dans cet article.
Le graphique est tiré de l'article et représente le temps pris en ms pour 1000 appels.
la source
Activator.CreateInstance
prendra0.0035ms
(ou 3,5 microsecondes) - selon votre application, cela peut même ne pas du tout s'inscrire dans les tests de performances.Comme alternative à Activator.CreateInstance, FastObjectFactory dans l'URL liée est meilleur qu'Activator (à partir de .NET 4.0 et nettement mieux que .NET 3.5. Aucun test / statistique effectué avec .NET 4.5). Voir le post StackOverflow pour les statistiques, les informations et le code:
Comment passer des arguments ctor dans Activator.CreateInstance ou utiliser IL?
la source
la source