【发布时间】:2019-09-24 07:10:46
【问题描述】:
我有几个文本框嵌套在一个面板中,我想检查它们是否有文本。虽然我不想这样写我的代码:
if(textbox1.Text != "" && textbox2.Text != "" ...)
{
...
}
有没有什么办法可以自动完成并提高代码本身的总体质量?
【问题讨论】:
我有几个文本框嵌套在一个面板中,我想检查它们是否有文本。虽然我不想这样写我的代码:
if(textbox1.Text != "" && textbox2.Text != "" ...)
{
...
}
有没有什么办法可以自动完成并提高代码本身的总体质量?
【问题讨论】:
这可以通过使用来自System.Linq 的OfType 和All 扩展方法非常容易地完成。
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 属性不为空时才会执行。
【讨论】:
您可以使用 Linq 扩展方法获取属性 Text 不为空的 Panel 的所有文本框:
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 != "") )
{
// ...
}
【讨论】: