Select 面板中的多个文本框

Select several textboxes in a panel

我在一个面板中嵌套了几个文本框,我想检查它们是否有文本。虽然我不想这样写我的代码:

if(textbox1.Text != "" && textbox2.Text != "" ...) 
{
    ...
}

有什么方法可以自动执行此操作并提高代码本身的总体质量吗?

您可以使用 Linq 扩展方法获取 属性 文本不为空的面板的所有文本框:

using System.Linq;

var textboxes = panel.Controls.OfType<TextBox>().Where(c => c.Text != "");

foreach ( TextBox textbox in textboxes )
{
  // ...
}

如果你想检查它们是否都是非空的,使用这个:

if ( panel.Controls.OfType<TextBox>().All(c => c.Text != "") )
{
  // ...
}

这可以通过使用 System.LinqOfTypeAll 扩展方法轻松完成。

var panel = new Panel
{
    Size = new Size(500, 500),
    BackColor = Color.Red
};

panel.Controls.Add(new TextBox { Text = "Value" });
panel.Controls.Add(new TextBox { Text = "Value2" });

if (panel.Controls.OfType<TextBox>().All(x => !string.IsNullOrEmpty(x.Text)))
{
    //Do something
}

if 语句中的代码只有在 TextBoxes 的所有 Text 属性都不为空时才会执行。