gpt4 book ai didi

c# - 反射:使用委托(delegate)设置通用对象的属性

转载 作者:太空宇宙 更新时间:2023-11-03 14:01:29 27 4
gpt4 key购买 nike

我正在开发一个简单的 ORM 库,实际上非常简单......

我有一个类型为 T 的查询

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

该方法采用 T 类,获取属性,循环遍历它们并相应地设置它们

aProperty.SetValue(tmpGenericObjectOfTypeT, newValue, null);

我的问题是 SetValue 非常慢,我看到了两种选择,使用 Reflection.Emit 或使用委托(delegate),不幸的是我不知道如何做。

正如我所读到的,使用委托(delegate)更优雅一些,我喜欢那个解决方案,但我真的不知道该怎么做,我搜索并找到了很多关于如何调用方法的信息使用委托(delegate),但不使用如何设置属性...

最佳答案

Dynamic methodsexpression trees知道如何获取/设置属性的人是去这里的方法。快速简单。

  • 使用反射检查你的类型的接口(interface)
  • 构建 getter/setter Actions/Funcs 并将它们缓存在将它们与原始类型相关联的对象中。
  • 在后续操作中使用缓存的 getter/setter。

与反射相比,您应该至少看到 20 倍的性能提升(如果不是更接近 50-100 倍的话)。

关于c# - 反射:使用委托(delegate)设置通用对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10611551/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com