c#list FindAll谓词不起作用

时间:2017-05-08 21:06:46

标签: c# delegates

尝试编写一个谓词,根据居住在家中的孩子和成年人的数量找到家庭。知道我可以找到1平方米的价格,并找到清理成本的金额。但是,我无法做出.FindAll的工作

     public void Find(List<PriceForCleaning> priceForCleaning)
    {
        int a = 0;
        foreach (var price in priceForCleaning)
        {
            List<Family> FalimiesBeingWorked = Families.FindAll(nn => nn.AmountOfKids == price.AmountOfKids && nn.AmountOfAdults == price.AmountOfAdults ? nn.HowMuchPayed = nn.AreaOfHome * price.OneSquareMeterCleaningPrice : 0);
        }
    }

我得到的错误: 错误1无法隐式转换类型&#39; int&#39;到了布尔&#39;
错误2无法将lambda表达式转换为委托类型&#39; System.Predicate&#39;因为块中的某些返回类型不能隐式转换为委托返回类型

2 个答案:

答案 0 :(得分:0)

FindAll()函数接受谓词。

谓词的格式为public delegate bool Predicate<in T>( T obj )

因此,您的lambda表达式必须返回bool

相反,它会返回int

我不确定你想要完成什么,但是你不能混淆&#34;通过住在家里的孩子和成年人的数量找到家庭&#34; &#34;查找清理费用。&#34;

首先进行一项操作,然后进行另一项操作。

答案 1 :(得分:0)

FindAll期待一个谓词。谓词按定义返回bool,这意味着你的lambda必须返回bool而不是执行计算。

var foundFamilies = Families.FindAll(nn => nn.AmountOfKids == 
          price.AmountOfKids && nn.AmountOfAdults == price.AmountOfAdults);

您可以对foundFamilies集合中的每个元素执行计算。