我有一个具有bool属性的特定对象的IEnumerable。我想算一下该属性以紧凑(就代码行而言)和易读的方式设置为true的对象数。
为了演示它,创建具有布尔属性“ InnerProperty”的类“ Obj”。静态函数“ CountInner”实现了上面定义的逻辑。如何更紧凑地实现它?
public class Obj
{
private bool InnerProperty { get; set; } = false;
public static int CountInner(IEnumerable<Obj> list)
{
var count = 0;
foreach (var l in list)
{
if (l.InnerProperty)
{
count++;
}
}
return count;
}
}
答案 0 :(得分:8)
您可以使用LINQ的Count
来接受谓词(“用于测试条件的每个元素的函数。”):
public static int CountInner(IEnumerable<Obj> list)
{
return list.Count(x => x.InnerProperty);
}
答案 1 :(得分:4)
基本上与其他答案相同,但使用表达式主体成员:
public static int CountInner(IEnumerable<Obj> list) => list.Count(x => x.InnerProperty);
答案 2 :(得分:2)
您可以像下面一样使用Linq System.Linq
。此外,InnerProperty
应该是一个字段而不是一个属性,因为对于private
属性设置器来说,这没有多大意义
public static int CountInner(IEnumerable<Obj> list)
{
var count = list.Where(l => l.InnerProperty).Count();
return count;
}
答案 3 :(得分:1)
您可以通过更简单的方式来做到这一点:
public class Obj
{
private bool InnerProperty { get; set; } = false;
public static int CountInner(IEnumerable<Obj> list)
{
return list.Count(b => b.InnerProperty);
}
}
只需使用Lambda Expression。