How do I iterate through instances of a class in C

2019-02-24 02:34发布

问题:

Is there a way to iterate over instances of a class in C#? These instances are not tracked or managed in a collection.

回答1:

Not inside the regular framework. You would need to track them manually.

You can, however, do this in windbg/sos - mainly for debugging purposes (not for routine code).



回答2:

You have to have references to them somewhere, or at least know where to look, so in identifying them you'd probably put them into a collection which you'd then iterate.

If you don't know where the references live, then you'd have to have to introduce some kind of tracking mechanism. Perhaps a static collection on the type? It would have to be implemented carefully though.



回答3:

Not directly.

You could conceptually have your object place a copy of itself into some well-known place (e.g. a static collection) and then use that to iterate, but then you'd have to make sure you cleared the instance out of that collection at some point or else it'll never get garbage collected.



回答4:

In the comment thread on this post there is an interesting discussion and solution related to this question.



回答5:

As Marc said, if you want to do it in code, you would need to keep a collection of them. If you are debugging, have a look at this blog post: http://blogs.msdn.com/tess/archive/2006/01/23/516139.aspx

If you need a collection in memory of all of the object instances of a certain type, you could consider using a collection of System.WeakRef's A weak ref is a reference that does not keep the object that it references. This would let you keep a collection of weak-refs to the object instances you want to enumerate. Have a look at Weakrefs in the help for more info.