У меня есть очень старый код, который использует отражение для установки свойств объектов, например, что-то вроде этого:
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 ) (я не знаю, какую технологию они используют внутри)?
- Есть ли другие варианты?