我现在有一个方法循环遍历业务对象列表(属性属性)来测试属性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;
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的LINQ方法呢?
我有以下几点:
return Properties.Where(x => !string.IsNullOrEmpty(x.SerialNumber)).ToList().Count > 0;
Run Code Online (Sandbox Code Playgroud)
是否有更好/更快的方法来检查非空字符串?
Łuk*_*.pl 12
您可以使用Any而不是检查计数是否大于零.
return Properties.Any(x => !string.IsNullOrEmpty(x.SerialNumber))
Run Code Online (Sandbox Code Playgroud)
当然,你的Properties.Count > 0支票是多余的.
public bool HasSerialNumber()
{
if(this.Properties != null)
return Properties.Any(p => !string.IsNullOrEmpty(p.SerialNumer));
return false;
}
Run Code Online (Sandbox Code Playgroud)
我不认为你会提高特别是在性能string.IsNullOrEmpty(),而是一个陷阱,你应该避免在你的查询的最后2个呼叫-特别是ToList()和Count().
你在做什么是遍历每个元素,将它转换为一个列表(创建一个列表并在过程中添加项目,然后遍历列表中的每个元素来计算有多少元素 - 所有元素都检查单个值是空的.
您可以使用该Any方法查找单个元素是否符合某些条件,如下所示:
return Properties.Any(x => !string.IsNullOrEmpty(x.SerialNumber));
Run Code Online (Sandbox Code Playgroud)