我有一个keyvaluepair(字符串,字符串)列表的第一个字符串是类似class.property,第二个字符串是分配给该class.property的值。为此使用反射,有没有另一种方法?
我目前正在通过该列表循环,并通过使用反射设置每个值。
它的工作,但我的问题是有更快的方式来做到这一点?
我有一个keyvaluepair(字符串,字符串)列表的第一个字符串是类似class.property,第二个字符串是分配给该class.property的值。为此使用反射,有没有另一种方法?
我目前正在通过该列表循环,并通过使用反射设置每个值。
它的工作,但我的问题是有更快的方式来做到这一点?
如果您反复使用相同的属性(例如针对各种目标对象),则使用Delegate.CreateDelegate
并使用build a delegate out of the setter的速度会更快。但是,我只会在我分析它时发现这是瓶颈。它碰巧对我的协议缓冲区实现产生了很大的影响,但这确实需要尽可能快,所以我很乐意应用一些微优化。
如果您需要多次在同一类型上设置相同的属性或属性,请缓存Type和PropertyInfo的属性。缓存是非常容易的事情 - 并且检查类型是反映场景中通常需要花费的时间。
如果您可以使用C#4进行此操作,则可以使用dynamic来提供更快的解决方案。 (我见过.NET 3.5标签,只是想我会提到它)。
动态不会(很容易)在这里工作 - 在C#4中的动态输入可以让你轻松地使用一个在编译时已知的名称,而不是静态类型导出它 - 但是你必须做相当数量的工作才能对一个只能通过字符串提供的名称进行此操作。无可否认,你可以创建一个Python脚本,然后运行它:) – 2009-11-29 15:49:06
如果你只有2串,我认为反射是你可以在这里使用的所有东西。 – brendan 2009-11-29 15:36:31