如果谓词返回true, Lambda表达式返回什么?
本文关键字:返回 表达式 什么 Lambda 谓词 true 如果 | 更新日期: 2023-09-27 17:53:25
如果谓词的条件为真,则返回参数fruit
(我知道这是一个输入参数),我感到困惑。如下段代码所示:
List<string> fruits = new List<string> {
"apple",
"passionfruit",
"banana",
"mango",
"orange",
"blueberry",
"grape",
"strawberry"
};
IEnumerable<string> query = fruits.Where(fruit => fruit.Length < 8);
// query contains: {apple,banana,mango,orange,grape}
IEnumerable<string> query2 = query.Where(fruit => fruits.Contains("apple"));
foreach (string fruity in query2)
{
Console.WriteLine(fruity);
}
// finally returns: {apple,banana,mango,orange,grape}
因此,如果条件为真,则似乎返回input。
如果我错了请指导我
Where
返回谓词返回true
的输入的过滤序列。它依次应用于每个元素,该项要么被生成,要么被丢弃。基本上:
public static IEnumerable<T>(this IEnumerable<T> source, Func<T,bool> predicate)
{
foreach(var el in source) {
if(predicate(el) {
yield return el;
}
}
}
看名字:
IEnumerable<string> query2 = query.Where(fruit => fruits.Contains("apple"));
也就是说,对于每个fruit
,查看整个集合 (fruits
,注意最后的s
)是否返回一个苹果。列表fruits
确实包含apple
,因此对所有水果都成立。
你的意思可能是:
IEnumerable<string> query2 = query.Where(fruit => fruit.Contains("apple"));
LINQ Where返回一个ienumerable集合,其中包含谓词返回true的所有项。
在你的第二个查询中,你正在做fruits.Contains("apple")
,它基本上总是为真,或者总是为假。也许你想做以下事情:
IEnumerable<string> query2 = query.Where(fruit => fruit == "apple");
//returns: {apple}
您可以考虑。其中lambda为SQL查询:
SELECT * FROM IEnumerable WHERE Predicate = TRUE;
对我来说,这是更可取的方式,由于SQL的背景:)