如果谓词返回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。

如果我错了请指导我

如果谓词返回true, Lambda表达式返回什么?

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的背景:)