Как передать параметры в активатор.Метод createinstance ()



Я хочу создать экземпляр типа, который я указываю в общем методе, который у меня есть. Этот тип имеет ряд перегруженных конструкторов. Я хотел бы иметь возможность передавать аргументы конструкторам, но



Activator.CreateInstance<T>()


не видит, чтобы иметь это в качестве опции.



есть ли другой способ сделать это?

530   4  

4 ответов:

да.

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

существует другой способ передачи аргументов для 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 звонков.

Performance comparison

Comments

    Ничего не найдено.