Этот пример предназначен исключительно для обучения, иначе я бы сразу использовал лямбда-выражения.
Я хотел бы попробовать использовать метод расширения Where () без лямбды, просто чтобы посмотреть, как он будет выглядеть, но я не могу понять, как заставить его скомпилироваться и работать правильно. Этот пример не имеет смысла, поэтому не пытайтесь выяснить какую-либо логику.
Я просто хочу знать, возможно ли использовать методы расширений без использования лямбды (только для целей обучения) и как это будет выглядеть в коде.
С чем меня смущает то, что условие Where () принимает Func<int,bool>
, но метод возвращает IEnumerable<int>
? Способ, которым определяется Func, он принимает в одном int и возвращает bool. Для меня было бы больше смысла, если бы это было Func<int, bool, IEnumberable<string>>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Delegates
{
public class Learning
{
/// <summary>
/// Predicates - specialized verison of Func
/// </summary>
public static void Main()
{
List<int> list = new List<int> { 1, 2, 3 };
Func<int, bool> someFunc = greaterThanTwo;
IEnumerable<int> result = list.Where(someFunc.Invoke(1));
}
static IEnumerable<int> greaterThanTwo(int arg, bool isValid)
{
return new List<int>() { 1 };
}
}
}
Обновленный код
public class Learning
{
/// <summary>
/// Predicates - specialized verison of Func
/// </summary>
public static void Main()
{
// Without lambda
List<int> list = new List<int> { 1, 2, 3 };
Func<int, bool> someFunc = greaterThanTwo;
// predicate of type int
IEnumerable<int> result = list.Where(someFunc);
}
static bool greaterThanTwo(int arg, bool isValid)
{
return true;
}
}
Я получаю следующую ошибку:
Нет перегрузки для совпадений 'greatThanTwo', делегат 'System.Func'