Как передать параметры в активатор.Метод createinstance ()
Я хочу создать экземпляр типа, который я указываю в общем методе, который у меня есть. Этот тип имеет ряд перегруженных конструкторов. Я хотел бы иметь возможность передавать аргументы конструкторам, но
Activator.CreateInstance<T>()
не видит, чтобы иметь это в качестве опции.
есть ли другой способ сделать это?
4 ответов:
существует другой способ передачи аргументов для CreateInstance через именованные параметры.
исходя из этого, вы можете передать массив в сторону
CreateInstance. Это позволит вам иметь 0 или несколько аргументов.public T CreateInstance<T>(params object[] paramArray) { return (T)Activator.CreateInstance(typeof(T), args:paramArray); }
как альтернатива активатору.CreateInstance, FastObjectFactory в связанных преформах url лучше, чем Activator (начиная с .NET 4.0 и значительно лучше, чем .NET 3.5. Нет тестов / статистики, выполненных с .NET 4.5). См. сообщение StackOverflow для статистики, информации и кода:
как передать ctor args в активатор.CreateInstance или использовать IL?
имейте в виду, что передавая аргументы на активатор.Свойство имеет существенной разницы производительности по сравнению с созданием параметров.
существуют лучшие альтернативы для динамического создания объектов с использованием предварительно скомпилированной лямбды. Конечно, всегда производительность субъективна, и это явно зависит от каждого случая, стоит ли это или нет.
подробнее о проблеме в этой статье.
график взят из статьи и представляет время в МС на 1000 звонков.

Comments