System.Windows.Forms.Control不包含"GetEnumerator"公共定义?

Dol*_*hin 0 c# foreach winforms

当我想遍历一个Forms控件时,这个foreach语句(foreach (Control __control in _control))给出一个错误:

System.Windows.Forms.Control不包含"GetEnumerator"公共定义.所以foreach语句不能是'System.Windows.Forms.Control'类型变量.

这是我的代码:

public DataTable addFormControlName(DataTable dt, string[] controls)
        {
            foreach (string controlName in controls)
            {                
                foreach (Control _control in this.Controls)
                {
                    if (_control.Name.ToString() == controlName)
                    {
                        if (_control.HasChildren)
                        {
                            foreach (Control __control in _control)
                            {
                                //traverse the control like 'groupBox'...
                            }
                        }
                    }
                }                
            }
            return dt;
        }
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能避免这个问题?

Ser*_*kiy 6

为了在foreach循环中枚举一些(集合)对象,该对象应该实现IEnumerable接口.Control不要实现这个接口.因此你在这里有错误:

foreach (Control __control in _control)
Run Code Online (Sandbox Code Playgroud)

如果你想枚举你的孩子,_control你应该枚举它的Controls集合:

foreach (Control __control in _control.Controls)
Run Code Online (Sandbox Code Playgroud)

还要考虑使用LINQ来按名称获取控件:

var controlsToUse = Controls.Cast<Control>()
                            .Where(c => controls.Contains(c.Name));
// do what you want
Run Code Online (Sandbox Code Playgroud)