有没有办法在C#中迭代一个类的实例?这些实例不会在集合中进行跟踪或管理。
答案 0 :(得分:8)
不在常规框架内。您需要手动跟踪它们。
但是,您可以在windbg / sos中执行此操作 - 主要用于调试目的(不适用于常规代码)。
答案 1 :(得分:1)
你必须在某个地方引用它们,或者至少知道在哪里看,所以在识别它们时你可能会将它们放入一个你要迭代的集合中。
如果您不知道引用的位置,那么您必须引入某种跟踪机制。也许这个类型的静态集合?但是必须谨慎实施。
答案 2 :(得分:1)
不直接。
你可以在概念上让你的对象将自己的副本放入一些众所周知的地方(例如静态集合),然后使用它进行迭代,但是你必须确保从该集合中清除了该实例在某些时候,否则它永远不会被垃圾收集。
答案 3 :(得分:0)
正如Marc所说,如果你想在代码中做到这一点,你需要保留它们的集合。如果您正在调试,请查看此博客文章:http://blogs.msdn.com/tess/archive/2006/01/23/516139.aspx
如果你需要一个特定类型的所有对象实例的内存集合,你可以考虑使用System.WeakRef的集合。弱ref是一个不保留它引用的对象的引用。这将允许您将弱引用的集合保存到要枚举的对象实例。有关详细信息,请查看帮助中的Weakrefs。
答案 4 :(得分:0)
在评论主题on this post中,有一个与此问题相关的有趣讨论和解决方案。