Жанры книг
Мы в соц.сетях
ParaKnig📚 » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
<< На главную

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

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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 257 258 259 260 261 262 263 264 265 ... 642
Перейти на страницу:

Применение запросов LINQ к объектам коллекций

Помимо извлечения результатов из простого массива данных выражения запросов LINQ могут также манипулировать данными внутри классов из пространства имен System.Collections.Generic, таких как List&lt;T&gt;. Создайте новый проект консольного приложения по имени ListOverCollections и определите базовый класс Car, который поддерживает текущую скорость, цвет, производителя и дружественное имя:

namespace LinqOverCollections

{

  class Car

  {

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

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

    public int Speed {get; set;}

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

  }

}

Теперь определите внутри операторов верхнего уровня локальную переменную типа List&lt;T&gt; для хранения элементов типа Car и с помощью синтаксиса инициализации объектов заполните список несколькими новыми объектами Car:

using System;

using System.Collections;

using System.Collections.Generic;

using System.Linq;

using LinqOverCollections;

Console.WriteLine(&quot;***** LINQ over Generic Collections *****n&quot;);

// Создать список List&lt;&gt; объектов Car.

List&lt;Car&gt; myCars = new List&lt;Car&gt;() {

  new Car{ PetName = &quot;Henry&quot;, Color = &quot;Silver&quot;, Speed = 100, Make = &quot;BMW&quot;},

  new Car{ PetName = &quot;Daisy&quot;, Color = &quot;Tan&quot;, Speed = 90, Make = &quot;BMW&quot;},

  new Car{ PetName = &quot;Mary&quot;, Color = &quot;Black&quot;, Speed = 55, Make = &quot;VW&quot;},

  new Car{ PetName = &quot;Clunker&quot;, Color = &quot;Rust&quot;, Speed = 5, Make = &quot;Yugo&quot;},

  new Car{ PetName = &quot;Melvin&quot;, Color = &quot;White&quot;, Speed = 43, Make = &quot;Ford&quot;}

};

Console.ReadLine();

Доступ к содержащимся в контейнере подобъектам

Применение запроса LINQ к обобщенному контейнеру ничем не отличается от такого же действия в отношении простого массива, потому что LINQ to Objects может использоваться с любым типом, реализующим интерфейс IEnumerable&lt;T&gt;. На этот раз цель заключается в построении выражения запроса для выборки из списка myCars только тех объектов Car, у которых значение скорости больше 55.

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

После получения подмножества на консоль будет выведено имя каждого объекта Car за счет обращения к его свойству PetName. Предположим, что определен следующий вспомогательный метод (принимающий параметр List&lt;Car&gt;), который вызывается в операторах верхнего уровня:

static void GetFastCars(List&lt;Car&gt; myCars)

{

  // Найти в List&lt;&gt; все объекты Car, у которых значение Speed больше 55.

  var fastCars = from c in myCars where c.Speed &gt; 55 select c;

  foreach (var car in fastCars)

  {

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

  }

}

Обратите внимание, что выражение запроса захватывает из List&lt;T&gt; только те элементы, у которых значение Speed больше 55. Запустив приложение, вы увидите, что критерию поиска отвечают только два элемента — Нenry и Daisy.

Чтобы построить более сложный запрос, можно искать только автомобили марки BMW со значением Speed больше 90. Для этого нужно просто создать составной булевский оператор с применением операции &amp;&amp; языка С#:

static void GetFastBMWs(List&lt;Car&gt; myCars)

  {

  // Найти быстрые автомобили BMW!

  var fastCars = from c in myCars

      where c.Speed &gt; 90 &amp;&amp; c.Make == &quot;BMW&quot; select c;

  foreach (var car in fastCars)

  {

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

  }

}

Теперь выводится только одно имя Henry. 

Применение запросов LINQ к необобщенным коллекциям

Вспомните, что операции запросов LINQ спроектированы для работы с любым типом, реализующим интерфейс IEnumerable&lt;T&gt; (как напрямую, так и через расширяющие методы). Учитывая то, что класс System.Array оснащен всей необходимой инфраструктурой, может оказаться сюрпризом, что унаследованные (необобщенные) контейнеры в пространстве имен System.Collections такой поддержкой не обладают. К счастью, итерация по данным, содержащимся внутри необобщенных коллекций, по-прежнему возможна с использованием обобщенного расширяющего метода Enumerable.OfТуре&lt;Т&gt;().

1 ... 257 258 259 260 261 262 263 264 265 ... 642
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Комментарии
Открыть боковую панель
Комментарии
Лариса
Лариса 11.03.2026 - 20:17
Странно,здесь имя девочки Аграфена,а на других сайтах я прослушала три книги этого цикла с именем Дарвина.Зачем менять имя и путать читателей? Опечатка- не Дарвина,  а  Дарина.
Григорий
Григорий 09.04.2025 - 22:24
Лучшая книга всех времен
Женя
Женя 02.04.2025 - 16:08
Любимая книга