Как соотнести метод расширения запроса 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>
находится слева от .