如何从foreach循环中排除特定类型的控件?

时间:2018-05-15 08:22:44

标签: c#

我正在尝试验证表单控件以查看它们是否为空,并在我的链接中找到了一个有趣的点。

List<string> emptycontrols = new List<string>();

foreach (Control control in Mainform.V_Datafield.Controls)
{
    if (control.Text.Contains(null))
    {
        emptycontrols.Add(control.Name);
    }
}
if (emptycontrols.Count > 0)
{
    MessageBox.Show("Empty fields detected:", emptycontrols.ToString()); 
}

上面是我平庸的解决方案,当它运行时,它出现一个控件,即DateTimePicker控件永远不会是空的,而且非常正确。

最后我的问题是如何从DateTimePicker循环中排除foreach控件,以便忽略它但继续检查其他控件?

组框(V_datafield)包含:

  • 10 x TextBoxes
  • 1 x RichTextBox
  • 如上所述,1 x DateTimePicker。

2 个答案:

答案 0 :(得分:5)

您可以随时在foreach循环

中查看以下内容
if (control is DateTimePicker)
     continue;

答案 1 :(得分:3)

您可以像这样使用is

foreach (Control control in Mainform.V_Datafield.Controls)
    if (!(control is DateTimePicker) && string.IsNullOrEmpty(control.Text))
        emptycontrols.Add(control.Name);

或者,实际上,您的循环可以使用LINQ删除,成为:

var emptyControls = Mainform.V_Datafield.Controls
    .Cast<Control>()
    .Where(control => !(control is DateTimePicker))
    .Where(control => string.IsNullOrEmpty(control.Text))
    .Select(control => control.Name);

使用两个Where来保留前一代码的逻辑,但可以使用&&合并它们。