Necesito establecer el alto de cada cuadro de texto en mi formulario, algunos de los cuales están anidados dentro de otros controles. Pensé que podría hacer algo como esto:¿Puedo tener un método que devuelva IEnumerator <T> y usarlo en un bucle foreach?
private static IEnumerator<TextBox> FindTextBoxes(Control rootControl)
{
foreach (Control control in rootControl.Controls)
{
if (control.Controls.Count > 0)
{
// Recursively search for any TextBoxes within each child control
foreach (TextBox textBox in FindTextBoxes(control))
{
yield return textBox;
}
}
TextBox textBox2 = control as TextBox;
if (textBox2 != null)
{
yield return textBox2;
}
}
}
Usando esta manera:
foreach(TextBox textBox in FindTextBoxes(this))
{
textBox.Height = height;
}
Pero, por supuesto, el compilador escupe su ficticia, porque foreach espera un IEnumerable en lugar de un IEnumerator.
¿Hay alguna manera de hacerlo sin tener que crear una clase separada con un método GetEnumerator()?
En realidad, 'foreach' no espera un' IEnumerable' en absoluto (ni un 'IEnumerable'). Solo espera algo que tenga un método 'GetEnumerator'. Ese método, a su vez, no necesariamente debe devolver un 'IEnumerator' o' IEnumerator '- solo necesita devolver algo que tenga un método' MoveNext() 'y una propiedad' Current'. –
Timwi