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

时间:2016-08-08 17:29:18

标签: c#

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

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

是否有类似的东西:如果所有这些文本框的值都是!= string.Empty,那就做点什么

2 个答案:

答案 0 :(得分:11)

您可以将文本框放在数组中并使用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

OfType<>()返回containingControl控件集合中TextBox类型的所有控件的枚举,然后您可以使用{{1}简单地遍历此序列}}

注意(正如其他人所指出的)使用All比使用string.IsNullOrEmpty()进行比较更好的做法(因为已经包含了空检查,但在文本框中这应该无关紧要) )。

答案 1 :(得分:1)

你可以创建一个这样的方法:

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

    return true;
}

或者这样使用LINQ:

private bool AreAllEmpty(params TextBox[] toCheck)
{
    return toCheck.All(tb => string.IsNullOrEmpty(tb.Text));
}

然后只需将您的文本框集合传递给它,例如像这样:

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

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