对于Mono,PropertyInfo.GetValue()的替代方案?

时间:2010-06-18 14:38:31

标签: c# reflection

我有一个具有以下签名的方法:

 private object GetNestedObject<y>(y objToAccess, string nestedObjectName)

我正在使用Reflection从objToAccess获取nestedObject并返回它。

这很好用,除非它真的很慢(我必须这样做几十万次)。 我遇到了HyperDescriptor,但由于我在Linux上运行它,而且Mono不支持TypeDescriptionProviders,我无法使用它。

在这种情况下,有没有其他方法可以使用getValue?我总是可以在每种类型的覆盖中进行硬编码,但这是不可取的,并且在我的情况下会增加很多维护开销。

3 个答案:

答案 0 :(得分:2)

Jon Skeet写了一篇关于使用Delegate.CreateDelegate()来加快速度的博文:

http://msmvps.com/blogs/jon_skeet/archive/2008/08/09/making-reflection-fly-and-exploring-delegates.aspx

我不知道它是否适用于Mono。

答案 1 :(得分:0)

我不确定Mono是否支持它,但对于这种情况(在高负载代码中使用Reflection),我通常使用System.Reflection.Emit动态生成特殊访问类。它们需要更长的时间来生成,但在此之后,访问速度非常快。

答案 2 :(得分:0)

你必须使用魔术弦吗?另一种选择是传入lambda表达式,方法是将lambda表达式写入代码或使用表达式树生成成员访问lambda表达式。如果你进入sxpression树路径,你可以很容易地编译表达式并缓存它们以供使用。