У меня есть очень старый код, который использует отражение для установки свойств объектов, например, что-то вроде этого:
var properties = obj.GetType().GetProperties(
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
foreach (var property in properties)
{
property.SetValue(obj, lookup[property.Name]);
}
Я думал о замене этого кода, чтобы сделать его быстрее. Но поскольку приведенный выше код также позволяет устанавливать частные свойства объекта, я не уверен, что существуют другие варианты.
Вопросы:
- Правильно ли я понимаю, что скомпилированные выражения (с использованием System.Linq.Expressions) и сгенерированный код (с использованием CodeDom/Microsoft.CSharp.CSharpCodeProvider) нельзя использовать для установки частных свойств?
- Возможно ли это с помощью Reflection.Emit?
- Будет ли какая-либо из библиотек сопоставления (AutoMapper, ValueInjecter) помочь в этом (я не знаю, какую технологию они используют внутри компании)?
- Есть ли другие варианты?