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

时间:2009-11-23 21:23:46

标签: c# .net iteration iterator

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

5 个答案:

答案 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中,有一个与此问题相关的有趣讨论和解决方案。