我有一些非常古老的代码,它使用反射来设置对象的属性,例如:
var properties = obj.GetType().GetProperties(
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
foreach (var property in properties)
{
property.SetValue(obj, lookup[property.Name]);
}
我正在考虑更换代码以使其更快。但是因为上面的代码也允许设置对象的私有属性,我不确定还有其他选项。
问题:
答案 0 :(得分:1)
开源框架Impromptu-Interface有一个静态方法InvokeSet
使用DLR而不是反射,它将调用私有方法。它的运行速度比单位速度测试案例中的反射快2倍,看起来与你的相似。
using ImpromptuInterface;
...
foreach(var property in properties){
ImpromptuInterface.InvokeSet(obj, property.Name, lookup[property.Name]);
}