フォーム上のすべてのテキストボックスの高さを設定する必要があります。その一部は他のコントロール内にネストされています。このようにそれを使用して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;
}
しかしforeachのがIEnumerableをではなく、を期待するので、もちろん、コンパイラは、そのダミーを吐きますIEnumerator。
GetEnumerator()メソッドを使用して別のクラスを作成せずにこれを行う方法はありますか?
実際、 'foreach'は' IEnumerable'を全く期待していません( 'IEnumerable'もありません)。 'GetEnumerator'メソッドを持つものだけが必要です。そのメソッドは、必ずしも 'IEnumerator'または' IEnumerator 'を返す必要はなく、' MoveNext() 'メソッドと' Current'プロパティを持つものだけを返す必要があります。 –
Timwi