检查至少有一个文本框中有多少内容的最佳方法是什么?

时间:2013-09-30 16:59:01

标签: c# if-statement concat cyclomatic-complexity code-complexity

我有一个'搜索页',要求至少有一个文本框有一些输入。以下方法验证如下:

    if (!String.IsNullOrEmpty(txtNome.Text))
    {
        return true;
    }
    if (!String.IsNullOrEmpty(txtEndereco.Text))
    {
        return true;
    }
    if (!String.IsNullOrEmpty(txtCidade.Text))
    {
        return true;
    }
    if (!String.IsNullOrEmpty(txtCEP.Text))
    {
        return true;
    }

    return false;

此方法的结果没有任何问题。我的问题与绩效有关:有没有更好的方法来进行检查?我想到的一种可能的选择:

string X = String.Concat(txtNome.Text,...,txtCEP.Text)
if(!String.IsNullOrEmpty(X))
{
    return true;
} 

我认为当第一个字段不为空时使用if-return模式会更好,但对于其他用例,使用String.Concat会更好。

有人能告诉我哪种方式更好,为什么?还有另一种更好的方法吗?

2 个答案:

答案 0 :(得分:4)

如果所有控件属于同一类型,您可以将要检查的所有控件放入数组中,然后使用Linq的Any扩展方法:

return new[] { txtNome, txtEndereco, txtCidade, txtCEP }
    .Any(x => !String.IsNullOrEmpty(x.Text));

或者,如果不是所有控件都是相同类型,则创建一个字符串数组:

return new[] { txtNome.Text, txtEndereco.Text, txtCidade.Text, txtCEP.Text }
    .Any(x => !String.IsNullOrEmpty(x));

这与普通的if - else - 块之间的性能差异可以忽略不计。

答案 1 :(得分:0)

从纯粹的性能角度来看,原始方法可以提高效率的唯一方法是,按照最常用,最少使用的顺序编写支票。

但是对于即使是陈旧过时的技术而言,比较值这样的简单操作几乎是即时的。试图在这里优化是真正浪费你的时间。而是专注于学习更快更简洁地编写代码的方法,因此当您将来重新访问代码时,理解和修改将更加容易。 p.s.w.g的答案显示了如何利用linq;我建议尝试一下。

在旁注中,我建议您使用String.IsNullOrWhiteSpace()而不是String.IsNullOrEmpty()。同样,它确实需要一些额外的性能开销,但它更有用。