Kniga-Online.club
» » » » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Читать бесплатно Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю. Жанр: Базы данных год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

  {

    Console.WriteLine("Item: {0}", game);

  }

  Console.WriteLine();

}

Как видите, построение выражения запроса LINQ с применением методов класса Enumerable напрямую приводит к намного более многословному запросу, чем в случае использования операций запросов С#. Кроме того, поскольку методы Enumerable требуют передачи делегатов в качестве параметров, обычно необходимо писать лямбда-выражения, чтобы обеспечить обработку входных данных внутренней целью делегата.

Построение выражений запросов с использованием типа 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() класса Enumerable. Положительная сторона данного подхода связана с тем, что синтаксис анонимных методов позволяет заключить всю обработку, выполняемую делегатами, в единственное определение метода. Тем не менее, этот метод функционально эквивалентен методам QueryStringsWithEnumerableAndLambdas() и QueryStringsWithOperators(), созданным в предшествующих разделах.

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

Построение выражений запросов с использованием типа Enumerable и низкоуровневых делегатов

Наконец, если вы хотите строить выражение запроса с применением многословного подхода, то можете отказаться от использования синтаксиса лямбда-выражений и анонимных методов и напрямую создавать цели делегатов для каждого типа Func<>. Ниже показана финальная версия выражения запроса, смоделированная внутри нового типа класса по имени VeryComplexQueryExpression:

class 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:

Перейти на страницу:

Троелсен Эндрю читать все книги автора по порядку

Троелсен Эндрю - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


Язык программирования C#9 и платформа .NET5 отзывы

Отзывы читателей о книге Язык программирования C#9 и платформа .NET5, автор: Троелсен Эндрю. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*