我使用反射从未知对象获取属性值。我总是在运行时知道未知对象的属性。所以,我只想从该对象中获取这些属性的值。反思对我有用,但我有性能问题。
我们还能以其他方式有效地实现这一目标吗?我们可以使用序列化吗?任何开箱即用的方法?
答案 0 :(得分:2)
前段时间我实现了一个使用Delegate.CreateDelegate
的属性访问机制,似乎比简单反射更快。你可以找到它on GitHub。
答案 1 :(得分:0)
如果您始终了解该属性并且可以修改“未知”对象,请让每个未知对象实现一个公共接口。这样,您可以将对象类型转换为您定义的接口,并直接调用属性。
如果你不能直接修改对象并且它们没有被密封,你可以从对象派生一个类并将其标记为实现界面,你仍然可以去。
此外,您对反射的性能问题不一定排除使用它。运行你自己的计时研究,看看性能打击真的值得担心。
如果您确实使用了反射并且对多个属性感兴趣,那么最好一次调用GetProperties并循环查找所需的内容,而不是多次调用GetProperty。