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

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

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

При вызове метода OfТуре<Т>() на объекте необобщенной коллекции (наподобие ArrayList) нужно просто указать тип элемента внутри контейнера, чтобы извлечь совместимый с IEnumerable<T> объект. Сохранить этот элемент данных в коде можно посредством неявно типизированной переменной.

Взгляните на показанный ниже новый метод, который заполняет ArrayList набором объектов Car (не забудьте импортировать пространство имен System.Collections в начале файла Program.cs):

static void LINQOverArrayList()

{

  Console.WriteLine("***** LINQ over ArrayList *****");

  // Необобщенная коллекция объектов Car.

  ArrayList myCars = new ArrayList() {

    new Car{ PetName = "Henry", Color = "Silver", Speed = 100, Make = "BMW"},

    new Car{ PetName = "Daisy", Color = "Tan", Speed = 90, Make = "BMW"},

    new Car{ PetName = "Mary", Color = "Black", Speed = 55, Make = "VW"},

    new Car{ PetName = "Clunker", Color = "Rust", Speed = 5, Make = "Yugo"},

    new Car{ PetName = "Melvin", Color = "White", Speed = 43, Make = "Ford"}

  };

  // Трансформировать ArrayList в тип, совместимый c IEnumerable<T>.

  var myCarsEnum = myCars.OfType<Car>();

  // Создать выражение запроса, нацеленное на совместимый с IEnumerable<T> тип.

  var fastCars = from c in myCarsEnum where c.Speed > 55 select c;

  foreach (var car in fastCars)

  {

    Console.WriteLine("{0} is going too fast!", car.PetName);

  }

}

Аналогично предшествующим примерам этот метод, вызванный в операторах верхнего уровня, отобразит только имена Henry и Daisy, основываясь на формате запроса LINQ.

Фильтрация данных с использованием метода OfТуре<Т>()

Как вы уже знаете, необобщенные типы способны содержать любые комбинации элементов, поскольку члены этих контейнеров (вроде ArrayList) прототипированы для приема System.Object. Например, предположим, что ArrayList содержит разные элементы, часть которых являются числовыми. Получить подмножество, состоящее только из числовых данных, можно с помощью метода OfТуре&lt;Т&gt;(), т.к. во время итерации он отфильтрует элементы, тип которых отличается от заданного:

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

static void OfTypeAsFilter()

{

  // Извлечь из ArrayList целочисленные значения.

  ArrayList myStuff = new ArrayList();

  myStuff.AddRange(new object[] { 10, 400, 8, false, new Car(), &quot;string data&quot; });

  var myInts = myStuff.OfType&lt;int&gt;();

  // Выводит 10, 400 и 8.

  foreach (int i in myInts)

  {

    Console.WriteLine(&quot;Int value: {0}&quot;, i);

  }

}

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

Исследование операций запросов LINQ

В языке C# предопределено порядочное число операций запросов. Некоторые часто применяемые из них перечислены в табл. 13.2. В дополнение к неполному списку операций, приведенному в табл. 13.3, класс System.Linq.Enumerable предлагает набор методов, которые не имеют прямого сокращенного обозначения в виде операций запросов С#, а доступны как расширяющие методы. Эти обобщенные методы можно вызывать для трансформации результирующего набора разными способами (Reverse&lt;&gt;(), ToArray&lt;&gt;(), ToList&lt;&gt;() и т.д.). Некоторые из них применяются для извлечения одиночных элементов из результирующего набора, другие выполняют разнообразные операции над множествами (Distinct&lt;&gt;(), Union&lt;&gt;(), Intersect&lt;&gt;() и т.п.), а есть еще те, что агрегируют результаты (Count&lt;&gt;(), Sum&lt;&gt;(), Min&lt;&gt;(), Мах&lt;&gt;() и т.д.).

Чтобы приступить к исследованию более замысловатых запросов LINQ, создайте новый проект консольного приложения по имени FunWithLinqExpressions и затем определите массив или коллекцию некоторых выборочных данных. В проекте FunWithLinqExpressions вы будете создавать массив объектов типа ProductInfo, определенного следующим образом:

namespace FunWithLinqExpressions

{

  class ProductInfo

  {

    public string Name {get; set;} = &quot;&quot;;

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

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

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


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

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


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

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

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


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