我有一个'搜索页',要求至少有一个文本框有一些输入。以下方法验证如下:
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
会更好。
有人能告诉我哪种方式更好,为什么?还有另一种更好的方法吗?
答案 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()
。同样,它确实需要一些额外的性能开销,但它更有用。