0

我有一个“搜索页面”,要求至少一个文本框有一些输入。以下方法可以这样验证:

    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更好。

有人可以让我知道哪种方式更好,为什么?还有其他更好的方法吗?

4

2 回答 2

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块之间的性能差异可以忽略不计。

于 2013-09-30T17:01:31.423 回答
1

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

但即使是旧的、过时的技术,诸如比较值之类的简单操作也几乎是即时的。在这里尝试优化真的是在浪费你的时间。而是专注于学习如何更快更简洁地编写代码,这样当你将来重新访问代码时,它会更容易理解和修改。pswg 的回答显示了如何利用 linq;我建议尝试一下。

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

于 2013-09-30T17:37:44.567 回答