2009-11-29 66 views
2

我有一个keyvaluepair(字符串,字符串)列表的第一个字符串是类似class.property,第二个字符串是分配给该class.property的值。为此使用反射,有没有另一种方法?

我目前正在通过该列表循环,并通过使用反射设置每个值。

它的工作,但我的问题是有更快的方式来做到这一点?

+1

如果你只有2串,我认为反射是你可以在这里使用的所有东西。 – brendan 2009-11-29 15:36:31

回答

3

如果您反复使用相同的属性(例如针对各种目标对象),则使用Delegate.CreateDelegate并使用build a delegate out of the setter的速度会更快。但是,我只会在我分析它时发现这是瓶颈。它碰巧对我的协议缓冲区实现产生了很大的影响,但这确实需要尽可能快,所以我很乐意应用一些微优化。

+0

有趣的是,现在读博客 – Fredou 2009-11-29 15:49:18

+0

不幸的是,我的keyvaluepair列表可以包含近百项,每一个都调用一个独特的class.property。该链接已加入书签,因为我很确定我将在稍后使用它,谢谢 – Fredou 2009-11-29 15:59:45

+0

如果您只打算使用一次属性,那么直接使用反射进行反射的速度将快于它得到。 – 2009-11-29 16:06:34

0

如果您需要多次在同一类型上设置相同的属性或属性,请缓存Type和PropertyInfo的属性。缓存是非常容易的事情 - 并且检查类型是反映场景中通常需要花费的时间。

如果您可以使用C#4进行此操作,则可以使用dynamic来提供更快的解决方案。 (我见过.NET 3.5标签,只是想我会提到它)。

+0

动态不会(很容易)在这里工作 - 在C#4中的动态输入可以让你轻松地使用一个在编译时已知的名称,而不是静态类型导出它 - 但是你必须做相当数量的工作才能对一个只能通过字符串提供的名称进行此操作。无可否认,你可以创建一个Python脚本,然后运行它:) – 2009-11-29 15:49:06

相关问题