如何在C#中迭代类的实例?

有没有办法在C#中迭代一个类的实例? 不会在集合中跟踪或管理这些实例。

不在常规框架内。 您需要手动跟踪它们。

但是,您可以在windbg / sos中执行此操作 – 主要用于调试目的(不适用于常规代码)。

你必须在某个地方引用它们,或者至少知道在哪里看,所以在识别它们时你可能会将它们放入一个你要迭代的集合中。

如果您不知道引用的位置,那么您必须引入某种跟踪机制。 也许这个类型的静态集合? 但必须谨慎实施。

不是直接的。

你可以在概念上让你的对象将自己的副本放入一些众所周知的地方(例如静态集合)然后使用它来迭代,但是你必须确保你在某个时候清除了该集合中的实例否则它永远不会被垃圾收集。

在这篇文章的评论主题中,有一个与此问题相关的有趣讨论和解决方案。

正如Marc所说,如果你想在代码中做到这一点,你需要保留它们的集合。 如果您正在调试,请查看此博客文章: http : //blogs.msdn.com/tess/archive/2006/01/23/516139.aspx

如果你需要一个特定类型的所有对象实例的内存集合,你可以考虑使用System.WeakRef的集合。弱ref是一个不保留它引用的对象的引用。 这将允许您将弱引用的集合保存到要枚举的对象实例。 有关详细信息,请查看帮助中的Weakrefs。