Мне нужно установить высоту каждого текстового поля в моей форме, некоторые из которых вложены в другие элементы управления. Я думал, что я мог бы сделать что-то вроде этого:Могу ли я получить метод, возвращающий IEnumerator <T> и использовать его в цикле 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;
}
}
}
Используя это следующим образом:
foreach(TextBox textBox in FindTextBoxes(this))
{
textBox.Height = height;
}
Но, конечно, компилятор выплевывает его соску, потому что Еогеасп ожидает IEnumerable, а не IEnumerator.
Есть ли способ сделать это без создания отдельного класса с методом GetEnumerator()?
На самом деле `foreach` не ожидает` IEnumerable` вообще (а не `IEnumerable`). Он ожидает только то, что имеет метод GetEnumerator. Этот метод, в свою очередь, необязательно должен возвращать `IEnumerator` или` IEnumerator `- ему нужно только вернуть то, что имеет метод MoveNext()` и свойство Current. –
Timwi
2010-09-01 14:22:53