试图寻找替代foreach的方法

New*_*his 2 c# foreach

即时尝试编写一个公共函数,可以在我的所有页面调用,以便在插入数据后清除所有文本框.我这样用过它:

public void clean(Control parent)
{
    try
    {
        foreach (Control c in parent)
        {
            TextBox tb = c as TextBox; //if the control is a textbox
                tb.Text = String.Empty; //display nothing
            }
        }



    catch (Exception ex)
    {
        Console.WriteLine("{0} Exception caught.", ex);
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,foreach提出了一个错误说法

"无法对变量类型system.web.ui.control进行操作,因为它不包含getenumerator的公共函数.

任何人都可以建议替代?

mus*_*fan 7

你想迭代子控件parent,所以使用这个:

foreach (Control c in parent.Controls)
{
    //Do Stuff
}
Run Code Online (Sandbox Code Playgroud)

建议

我还建议检查控件是否TextBox也是......

TextBox tb = c as TextBox;
if(tb != null)//Will be null if c is not a TextBox
{
    tb.Text = String.Empty;
}
Run Code Online (Sandbox Code Playgroud)

要么

if(c is TextBox)//Check if c is TextBox before using it
{
    TextBox tb = c as TextBox;
    tb.Text = String.Empty;
}
Run Code Online (Sandbox Code Playgroud)

(参见有关良好讨论的评论以及两种方法之间差异的链接)

  • 当你已经建议更有效的`as``!= null`路线时,为什么建议浪费`````路线? (4认同)

Sri*_*vel 5

我使用OfType扩展方法只过滤TextBoxes.你的工作不起作用,因为你不能枚举Control你需要一个IEnumerable典型的(虽然不是必需的).

foreach (TextBox tb in parent.Controls.OfType<TextBox>())
{
    tb.Text = String.Empty;
    //or
    tb.Clear();
}
Run Code Online (Sandbox Code Playgroud)