询问lambda是否有捕获?

时间:2015-12-17 14:53:42

标签: c# reflection lambda garbage-collection

假设我有一个Object o ,以及一个由lambda构建的Action a 。我有什么方法可以使用(例如)反射或GC来确定 a 是否捕获 o

1 个答案:

答案 0 :(得分:1)

我知道您可以使用近似解决方案。在这种情况下,您确实可以使用Reflection来遍历对象图。除堆栈上的对象引用之外的所有对象引用都是通过反射可见您需要查看所有字段和所有数组元素。

写这不是那么难,但它非常不可靠和缓慢。如果你运气不好,你的遍历会发现巨大的物体图并花费大量时间来收集它们。

也许您可以简化问题,只说明从a.Targeto的直接引用计数。那会更容易。只需查看a.Target的所有字段值。

没有内置的API可以做到这一点,感谢上帝。这是最终的分层违规,因为没有任何实现细节仍然隐藏。