我现在有一个方法循环遍历业务对象列表(属性属性),以测试属性SerialNumber
是否是序列号。如果我找到一个序列号,我退出循环并返回true,否则我返回false。
代码如下:
public bool HasSerialNumber()
{
if (this.Properties != null && this.Properties.Count > 0)
{
foreach (var property in Properties)
{
if (!string.IsNullOrEmpty(property.SerialNumber))
return true;
}
}
return false;
}
对此有更好的LINQ方法吗?
我记得以下几点:
return Properties.Where(x => !string.IsNullOrEmpty(x.SerialNumber)).ToList().Count > 0;
是否有更好/更快的方法来检查非空字符串?
答案 0 :(得分:12)
您可以使用Any
代替检查计数是否大于零。
return Properties.Any(x => !string.IsNullOrEmpty(x.SerialNumber))
当然,您的Properties.Count > 0
检查是多余的。
答案 1 :(得分:9)
public bool HasSerialNumber()
{
if(this.Properties != null)
return Properties.Any(p => !string.IsNullOrEmpty(p.SerialNumer));
return false;
}
答案 2 :(得分:6)
我认为你不会特别改善string.IsNullOrEmpty()
的效果,但你要避免的一个陷阱是你的查询的最后两次调用 - 特别是ToList()
和{{1} }。
你正在做的是迭代每个元素,将它转换为一个列表(创建一个列表并在过程中添加项目,然后迭代列表中的每个元素来计算有多少元素 - 所有都要检查是否单个值为空。
您可以使用Count()
方法查找单个元素是否符合某些条件,如下所示:
Any
答案 3 :(得分:3)
这应该可以解决问题:
return Properties.Any(x => !string.IsNullOrEmpty(x.SerialNumber));