反思:使用委托设置一个通用对象的属性(Reflection: Set a property of a

2019-09-17 06:31发布

我工作的一个简单的ORM库,其实很简单......

我有一个类型T的查询

public IEnumerable<T> Query<T>(string query)

该方法采用的T舱,它得到的属性,通过它们循环,并将它们设置相应

aProperty.SetValue(tmpGenericObjectOfTypeT, newValue, null);

我的问题是,是的SetValue慢得令人难以置信,我看到了两个备选方案,使用Reflection.Emit的,或使用委托,不幸的是我不知道如何做任何的那些。

正如我读过,使用委托更优雅一点,和我想的是解决方案,但我真的不知道该怎么做,我搜索,发现关于如何使用委托方法调用了很多,但不知道如何设置属性...

Answer 1:

动态方法或表达式树它知道如何获得/设置属性是去这里的路。 方便快捷。

  • 检查你的类型使用反射界面
  • 建立的getter / setter Actions/Funcs并在其中它们涉及原始类型的对象缓存。
  • 使用缓存的getter /在后续操作中setter方法。

您应该看到至少在反思的性能高出20倍(如果不是更喜欢50-100X)。



Answer 2:

HyperDescriptor工作得很好(ReflectionEmit为主)。 http://www.codeproject.com/Articles/18450/HyperDescriptor-Accelerated-dynamic-property-acces

在“委托”法所指的可能是表达式树?



文章来源: Reflection: Set a property of a generic object using delegates
标签: c# reflection