Итак, у меня есть тысячи объектов общего типа T, и я хочу передать их в массив объектов, которые у меня есть. Так что я должен получить список свойств T, и для каждого свойства установите значение соответствующего объекта в массивеReflection: настройка свойств множества объектов с использованием динамических методов
for (int i = 0; reader.Read(); i++)
{
T tmp = (T)Activator.CreateInstance(typeof(T));
foreach (var prop in properties)
{
prop.SetValue(tmp, reader.GetValue(reader.GetOrdinal(prop.Name)), null);
}
}
читатель является DataReader. Проблема в том, что prop.SetValue печально медленный (потребляет 50% от общего времени исключения), I've been told, чтобы использовать динамические методы или деревья выражений, я попытался использовать деревья выражений, но из того, что понял, мне нужно сгенерировать один дерево для каждого значения, которое я хочу установить, что было бы не так хорошо. Таким образом, Dynamic Methods - это другой вариант. В идеале мне нужно будет создать метод SetProp (object, propertyName, value), который я могу повторно использовать снова и снова.
* лично *, я бы сказал, «не используйте GetOrdinal для каждой ячейки», хотя это не будет иметь большого значения, однако, поскольку это явно «код чтения данных», который имеет совпадение 1: 1 между имя свойства и имя столбца, я действительно предлагаю вам посмотреть на dapper-dot-net; он предназначен для ** именно ** этого сценария и делает доступ к данным просто безболезненным. Это инструмент, который мы написали и широко используем для большинства наших данных - здесь, в Stack Overflow. –