Ich möchte eine Instanz eines Typs erstellen, den ich in einer generischen Methode angegeben habe. Dieser Typ verfügt über eine Reihe überladener Konstruktoren. Ich möchte in der Lage sein, Argumente an die Konstruktoren zu übergeben, aber
Activator.CreateInstance<T>()
sieht dies nicht als Option.
Gibt es einen anderen Weg, es zu tun?
c#
generics
createinstance
DaveDev
quelle
quelle
Antworten:
Ja.
quelle
Es gibt eine andere Möglichkeit, Argumente über benannte Parameter an CreateInstance zu übergeben.
Basierend darauf können Sie ein Array an übergeben
CreateInstance
. Auf diese Weise können Sie 0 oder mehrere Argumente haben.quelle
Beachten Sie jedoch, dass das Übergeben von Argumenten für Activator.CreateInstance einen erheblichen Leistungsunterschied gegenüber der parameterlosen Erstellung aufweist.
Es gibt bessere Alternativen zum dynamischen Erstellen von Objekten mit vorkompiliertem Lambda. Natürlich ist die Leistung immer subjektiv und es hängt eindeutig von jedem Fall ab, ob es sich lohnt oder nicht.
Details zum Problem in diesem Artikel.
Die Grafik stammt aus dem Artikel und zeigt die Zeit in ms pro 1000 Anrufe.
quelle
Activator.CreateInstance
nehmen0.0035ms
(oder 3,5 Mikrosekunden) - je nach Anwendung diese nicht einmal in Performance-Tests überhaupt registrieren.Als Alternative zu Activator.CreateInstance ist FastObjectFactory in der verknüpften URL besser als Activator (ab .NET 4.0 und deutlich besser als .NET 3.5. Keine Tests / Statistiken mit .NET 4.5 durchgeführt). Statistiken, Informationen und Code finden Sie im StackOverflow-Beitrag:
Wie übergebe ich ctor args in Activator.CreateInstance oder verwende IL?
quelle
quelle