I have a usercontrol with an internal list that I published publicly using IEnumerable. When I use foreach to list it, the user control is removed. Why is this happening?
Playback Example:
using System; using System.Collections; using System.Drawing; using System.Windows.Forms; public class VanishingControl : UserControl, IEnumerable, IEnumerator { string[] strings = { "uno", "due", "tres" }; int position = -1; public IEnumerator GetEnumerator() { return this; } public object Current { get { return strings[position]; } } public bool MoveNext() { position++; return position < strings.Length; } public void Reset() { position = 0; } protected override void Dispose(bool disposing) { Console.WriteLine("bye!"); base.Dispose(disposing); } } public class Vanish : Form { private VanishingControl vc = new VanishingControl(); public Vanish() { vc.BackColor = Color.Black; vc.Click += vc_Click; Controls.Add(vc); } void vc_Click(object sender, EventArgs e) { foreach (string s in vc) Console.WriteLine(s); } [STAThread] static void Main() { Application.Run(new Vanish()); } }
Run it in the debugger and click the black square.
source share