Как соотнести метод расширения запроса Linq с его сигнатурой в документации?

Возьми этот код из MSDN:

В следующем примере кода показано, как использовать Where(IEnumerable, Func) для фильтрации последовательности.

List<string> fruits =
    new List<string> { "apple", "passionfruit", "banana", "mango", 
                    "orange", "blueberry", "grape", "strawberry" };

IEnumerable<string> query = fruits.Where(fruit => fruit.Length < 6);

foreach (string fruit in query)
{
    Console.WriteLine(fruit);
}
/*
 This code produces the following output:

 apple
 mango
 grape
*/

Когда я смотрю на подпись,

Where<TSource>(IEnumerable<TSource>, Func<TSource, Boolean>)

Какая часть (fruit => fruit.length < 6) является IEnumerable<TSource>? И делает Func<TSource, Boolean> включать всю лямбду или только то, что идет после =>? Я предполагаю, что за кулисами Где <TSource> заменяется компилятором с правильным типом для Generic, но я не знаю, как читать остальные.

РЕДАКТИРОВАТЬ: Было бы легче понять, если бы это был делегат, а не лямбда, если посмотреть, что указывает на то, что в документации?

1 ответ

Решение

Если вы посмотрите на сигнатуру метода, вы увидите, что он определен как

public static Enumerable
{
    public static IEnumerable<TSource> Where<TSource>(
        this IEnumerable<TSource> source,
        Func<TSource, bool> predicate
    )
}

this делает это методом расширения. так делать

fruits.Where(fruit => fruit.Length < 6);

это то же самое, что делать

Enumerable.Where(fruits, fruit => fruit.Length < 6);

Итак, чтобы ответить на ваш вопрос IEnumerable<T> находится слева от .

Другие вопросы по тегам