Может у меня есть метод, возвращающий IEnumerator <T> и использовать его вцикл по каждому элементу ?

мне нужно задать высоту каждое текстовое поле на форме, некоторые из которых будут вложены в другие элементы управления. Я думал, что смогу сделать что-то вроде этого:

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;
        }
    }
}

с Помощью так:

foreach(TextBox textBox in FindTextBoxes(this))
{
    textBox.Height = height;
}

Но, конечно, компилятор выплевывает пустышку, потому что foreach ожидает IEnumerable, а не IEnumerator.

Есть ли способ сделать это без того, чтобы создавать отдельный класс с GetEnumerator() метод?

Найдено 5 ответов:

Can I have a method returning IEnumerator<T> and use it in a foreach loop?

http://stackoverflow.com/questions/3315/can-i-have-a-method-returning-ienumeratort-and-use-it-in-a-foreach-loop

Посмотреть решение →