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

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

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

class LINQBasedFieldsAreClunky

{

  private static string[] currentVideoGames =

    {"Morrowind", "Uncharted 2",

    "Fallout 3", "Daxter", "System Shock 2"};

<b>  // Здесь нельзя использовать неявную типизацию!</b>

<b>  // Тип subset должен быть известен!</b>

  private IEnumerable&lt;string&gt; subset =

    from g in currentVideoGames

    where g.Contains(&quot; &quot;)

    orderby g

    select g;

  public void PrintGames()

  {

    foreach (var item in subset)

    {

      Console.WriteLine(item);

    }

  }

}

Запросы LINQ часто определяются внутри области действия метода или свойства. Кроме того, для упрощения программирования результирующий набор будет храниться в неявно типизированной локальной переменной, использующей ключевое слово var. Вспомните из главы 3, что неявно типизированные переменные не могут применяться для определения параметров, возвращаемых значений, а также полей класса или структуры.

Итак, вполне вероятно, вас интересует, каким образом возвратить результат запроса внешнему коду. Ответ: в зависимости от обстоятельств. Если у вас есть результирующий набор, состоящий из строго типизированных данных, такой как массив строк или список List&lt;T&gt; объектов Car, тогда вы могли бы отказаться от использования ключевого слова var и указать подходящий тип IEnumerable&lt;T&gt; либо IEnumerable (т.к. IEnumerable&lt;T&gt; расширяет IEnumerable). Ниже приведен пример класса Program в новом проекте консольного приложения по имени LinqRetValues:

using System;

using System.Collections.Generic;

using System.Linq;

Console.WriteLine(&quot;***** LINQ Return Values *****n&quot;);

IEnumerable&lt;string&gt; subset = GetStringSubset();

foreach (string item in subset)

{

  Console.WriteLine(item);

}

Console.ReadLine();

static IEnumerable&lt;string&gt; GetStringSubset()

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

{

  string[] colors = {&quot;Light Red&quot;, &quot;Green&quot;, &quot;Yellow&quot;, &quot;Dark Red&quot;, &quot;Red&quot;, &quot;Purple&quot;};

  // Обратите внимание, что subset является

  // совместимым с IEnumerable&lt;string&gt; объектом.

  IEnumerable&lt;string&gt; theRedColors =

     from c in colors where c.Contains(&quot;Red&quot;) select c;

  return theRedColors;

}

Результат выглядит вполне ожидаемо:

Light Red

Dark Red

Red

Возвращение результатов LINQ посредством немедленного выполнения

Рассмотренный пример работает ожидаемым образом только потому, что возвращаемое значение GetStringSubset() и запрос LINQ внутри этого метода были строго типизированными. Если применить ключевое слово var для определения переменной subset, то возвращать значение будет разрешено, только если метод по-прежнему прототипирован с возвращаемым типом IEnumerable&lt;string&gt; (и если неявно типизированная локальная переменная на самом деле совместима с указанным возвращаемым типом).

Поскольку оперировать с типом IEnumerable&lt;T&gt; несколько неудобно, можно задействовать немедленное выполнение. Скажем, вместо возвращения IEnumerable&lt;string&gt; можно было бы возвратить просто string[] при условии трансформации последовательности в строго типизированный массив. Именно такое действие выполняет новый метод класса Program:

static string[] GetStringSubsetAsArray()

{

  string[] colors = {&quot;Light Red&quot;, &quot;Green&quot;,

                     &quot;Yellow&quot;, &quot;Dark Red&quot;, &quot;Red&quot;, &quot;Purple&quot;};

  var theRedColors = from c in colors where c.Contains(&quot;Red&quot;) select c;

  // Отобразить результаты в массив.

  return theRedColors.ToArray();

}

В таком случае вызывающий код совершенно не знает, что полученный им результат поступил от запроса LINQ, и просто работает с массивом строк вполне ожидаемым образом. Вот пример:

foreach (string item in GetStringSubsetAsArray())

{

  Console.WriteLine(item);

}

Немедленное выполнение также важно при попытке возвратить вызывающему коду результаты проецирования LINQ. Мы исследуем эту тему чуть позже в главе. А сейчас давайте посмотрим, как применять запросы LINQ к обобщенным и необобщенным объектам коллекций.

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

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

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


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

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


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

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

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


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