lit*_*rva 20 c# ienumerable ienumerator 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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
像这样使用它:
foreach(TextBox textBox in FindTextBoxes(this))
{
textBox.Height = height;
}
Run Code Online (Sandbox Code Playgroud)
但是编译器当然会吐出它的假,因为foreach期望IEnumerable而不是IEnumerator.
有没有办法在不必使用GetEnumerator()方法创建单独的类的情况下执行此操作?
Dav*_*ier 14
正如编译器告诉你的那样,你需要将返回类型更改为IEnumerable.这就是yield return语法的工作原理.
Ori*_*rds 10
只是为了澄清
private static IEnumerator<TextBox> FindTextBoxes(Control rootControl)
Run Code Online (Sandbox Code Playgroud)
改变为
private static IEnumerable<TextBox> FindTextBoxes(Control rootControl)
Run Code Online (Sandbox Code Playgroud)
这应该是全部:-)
归档时间: |
|
查看次数: |
10710 次 |
最近记录: |