我有一些非常古老的代码,它使用反射来设置对象的属性,例如:
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)都会对此有所帮助(我不知道他们在内部使用什么技术)?
- 还有其他选择吗?