English 中文(简体)
How do I iterate through instances of a class in C#?
原标题:

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

最佳回答

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).

问题回答

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.

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.

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

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.





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签