C# 检查多个变量C是否等于相同的值#

C# 检查多个变量C是否等于相同的值#,c#,C#,是否有此比较声明的简写版本: if (txtId.Text != string.Empty && txtName.Text != string.Empty && txtBOD.Text != string.Empty && txtPhone.Text != string.Empty) {//do something } 是否有这样的情况:如果所有这些文本框都有值!=string.Empty,然后执行一些操作您可以将文本框放入一个数组中,并像这样使

是否有此比较声明的简写版本:

if (txtId.Text != string.Empty && txtName.Text != string.Empty && txtBOD.Text != string.Empty && txtPhone.Text != string.Empty)
{//do something }

是否有这样的情况:如果所有这些文本框都有值!=string.Empty,然后执行一些操作

您可以将文本框放入一个数组中,并像这样使用linq:

TextBox[] boxes = new [] {txtId, txtName, txtBOD, txtPhone};
if (boxes.All(b => !string.IsNullOrEmpty(b.Text)))
    // do something
您应该将数组存储在窗口的成员变量中,这样就不必为每次检查都重新创建数组


或者(正如Habib指出的那样),如果所有这些文本框都在一个容器控件中,并且它们是该控件上唯一的文本框,那么您可以使用:

if (containingControl.Controls.OfType<TextBox>().All(b => !string.IsNullOrEmpty(b.Text)))
    // do something
if(containingControl.Controls.OfType().All(b=>!string.IsNullOrEmpty(b.Text)))
//做点什么
OfType()
返回
包含控件的控件集合中属于
文本框类型的所有控件的枚举,然后您可以使用
all
简单地遍历此序列



请注意(正如其他人指出的那样),使用
string.IsNullOrEmpty()
比比较
string.Empty
(因为已经包含了null检查,但这在文本框中并不重要)。

您可以创建如下方法:

private bool AreAllEmpty(params TextBox[] toCheck)
{
    foreach (var tb in toCheck)
    {
        if (!string.IsNullOrEmpty(tb.Text)) return false;
    }

    return true;
}
if(AreAllEmpty(textBox1, textBox2, textBox3, textBox4))
{
    // do something../
}
或者用LINQ的方式:

private bool AreAllEmpty(params TextBox[] toCheck)
{
    return toCheck.All(tb => string.IsNullOrEmpty(tb.Text));
}
然后将您的文本框集合传递给它,例如:

private bool AreAllEmpty(params TextBox[] toCheck)
{
    foreach (var tb in toCheck)
    {
        if (!string.IsNullOrEmpty(tb.Text)) return false;
    }

    return true;
}
if(AreAllEmpty(textBox1, textBox2, textBox3, textBox4))
{
    // do something../
}

如果您像我一样,喜欢通过将单独的操作卸载到自己的方法中来减少方法大小,那么这种方法是很好的。(这有很多优点:干性、关注点分离等)

好主意,我会添加一个如何使用的示例(可能使用linq而不是foreach,但这可能是一个味道问题)。+1,如果OP在单个面板/控件中有控件,那么同样可以这样做:
panel.Controls.OfType().All(b=>b.Text!=string.Empty)(对于winform,其他人也可以采用类似的方法)建议测试
b.Length=0
!string.IsNullOrEmpty(b)
@BastianThiede我同意,只是从OP复制了代码,没有考虑这一点。