Язык программирования C#9 и платформа .NET5 - Джепикс Филипп - Страница 269
- Предыдущая
- 269/642
- Следующая
{ Console.WriteLine("Item: {0}", game); } Console.WriteLine();}Как видите, построение выражения запроса LINQ с применением методов класса
EnumerableEnumerableПостроение выражений запросов с использованием типа Enumerable и анонимных методов
Учитывая, что лямбда-выражения C# — это просто сокращенный способ работы с анонимными методами, рассмотрим третье выражение запроса внутри вспомогательного метода
QueryStringsWithAnonymousMethods()static void QueryStringsWithAnonymousMethods(){ Console.WriteLine("***** Using Anonymous Methods *****"); string[] currentVideoGames = {"Morrowind", "Uncharted 2", "Fallout 3", "Daxter", "System Shock 2"}; // Построить необходимые делегаты Func<> // с использованием анонимных методов. Func<string, bool> searchFilter = delegate(string game) { return game.Contains(" "); }; Func<string, string> itemToProcess = delegate(string s) { return s; }; // Передать делегаты в методы класса Enumerable. var subset = currentVideoGames.Where(searchFilter).OrderBy(itemToProcess). Select(itemToProcess); // Вывести результаты. foreach (var game in subset) { Console.WriteLine("Item: {0}", game); } Console.WriteLine();}Такой вариант выражения запроса оказывается еще более многословным из-за создания вручную делегатов
Func<>Where()OrderBy()Select()EnumerableQueryStringsWithEnumerableAndLambdas()QueryStringsWithOperators()Построение выражений запросов с использованием типа Enumerable и низкоуровневых делегатов
Наконец, если вы хотите строить выражение запроса с применением многословного подхода, то можете отказаться от использования синтаксиса лямбда-выражений и анонимных методов и напрямую создавать цели делегатов для каждого типа
Func<>VeryComplexQueryExpressionclass VeryComplexQueryExpression{ public static void QueryStringsWithRawDelegates() { Console.WriteLine("***** Using Raw Delegates *****"); string[] currentVideoGames = {"Morrowind", "Uncharted 2", "Fallout 3", "Daxter", "System Shock 2"}; // Построить необходимые делегаты Func<>. Func<string, bool> searchFilter = new Func<string, bool>(Filter); Func<string, string> itemToProcess = new Func<string,string>(ProcessItem); // Передать делегаты в методы класса Enumerable. var subset = currentVideoGames .Where(searchFilter) .OrderBy(itemToProcess) .Select(itemToProcess); // Вывести результаты. foreach (var game in subset) { Console.WriteLine("Item: {0}", game); } Console.WriteLine(); } // Цели делегатов. public static bool Filter(string game) { return game.Contains(" "); } public static string ProcessItem(string game) { return game; }}Чтобы протестировать такую версию логики обработки строк, метод
QueryStringsWithRawDelegates()Program- Предыдущая
- 269/642
- Следующая
