Полезный общий список в VB.NET

Обобщения расширяют возможности и гибкость VB.NET во многих областях, но вы получаете большее преимущество в производительности и больше возможностей программирования в общем Список объект [Список (Т)], чем с любым другим.

Использовать Список (Т)вы должны понимать, как реализовать множество методов, предоставляемых .NET Framework. Ниже приведены три примера использования Для каждого, Найти все, и Сортировать, который демонстрирует, как общий Список классные работы.

Самый первый шаг заключается в создании общего Список. Вы можете получить данные разными способами, но самое простое - просто добавлять Это. Код ниже показывает, как классифицировать мою коллекцию пива и вина!

Начальный код

Сначала должен быть объект, который будет представлять бутылку из коллекции. В приложении Windows Forms класс Form должен сначала находиться в файле, иначе конструктор Visual Studio не будет работать правильно, поэтому поместите его в конец:

Бутылка общественного класса. Публичный бренд как строка. Публичное имя в виде строки. Публичная категория как строка. Публичный размер как десятичный. Public Sub New (_. ByVal m_Brand As String, _. ByVal m_Name As String, _. ByVal m_Category As String, _. ByVal m_Size As Decimal) Brand = m_Brand. Имя = m_Name. Category = m_Category. Размер = m_Size. End Sub. Конечный класс
instagram viewer

Чтобы собрать коллекцию, добавлять предметы. Это то, что в Загрузка формы событие:

Тусклый шкаф как список (из бутылки) = _. «Новый список (из бутылки) Кабинет. Добавить (Новая бутылка (_. "Касл-Крик", _. "Uintah Blanc", _. "Вино", 750)) Кабинет. Добавить (Новая бутылка (_. "Пивоваренная компания Каньон Сион", _. "Springdale Amber Ale", _. "Пиво", 355)) Кабинет. Добавить (Новая бутылка (_. "Виноградники Испанской долины", _. "Сира", _. "Вино", 750)) Кабинет. Добавить (Новая бутылка (_. "Wasatch Beers", _. "Многоженство Портер", _. "Пиво", 355)) Кабинет. Добавить (Новая бутылка (_. "Сквоттерс Пиво", _. "Прово Девушка Пилснер", _. "Пиво", 355))

Весь приведенный выше код является стандартным кодом в VB.NET 1.0. Тем не менее, обратите внимание, что, определяя свой собственный бутылка объект, вы получаете преимущества нескольких типов в одной коллекции (в этом случае оба строка и Десятичная дробь) и эффективный, типа безопасный «поздний переплет».

Пример ForEach

Веселье начинается, когда мы используем методы. Для начала давайте реализуем знакомую Для каждого метод. Документация Microsoft включает это определение синтаксиса использования:

Dim экземпляр As List. Dim action As Action (Of T) экземпляр. ForEach (действие)

Microsoft далее определяет действие as "делегировать методу, который выполняет действие над переданным ему объектом. Элементы текущего Списка (T) по отдельности передаются делегату Action (T). "

Чаевые: Подробнее о делегатах читайте Использование делегатов в Visual Basic .NET для гибкости времени выполнения.

Первое, что вам нужно кодировать, это метод, который будет делегирован. Неправильное понимание этого ключевого момента является источником большинство путаницы студентов VB.NET. Эта функция, или подпрограмма, - это то место, где выполняется все настраиваемое кодирование для объектов типа «Of».

Когда выполнено правильно, вы по сути дела. Это действительно просто в этом первом примере. Целый экземпляр бутылка и подпрограмма выбирает из нее все, что нужно. Кодирование Для каждого само по себе тоже просто. Просто введите адрес делегата, используя AddressOf метод.

Sub displayBottle (ByVal b As Bottle) ResultList. Предметы. Добавить (_ б. Марка & "-" & _ b. Имя & "-" & _ b. Категория & "-" & _ b. Размер) Конец Sub Частный Sub ForEachButton_Click (... ResultList. Предметы. Очистить () ResultList. Предметы. Добавить («Для каждого примера») ResultList. Предметы. Добавить ("") кабинет. ForEach (AddressOf displayBottle) End Sub

Пример FindAll

Найти все немного сложнее. Документация Microsoft для Найти все выглядит так:

Dim instance As List Dim match As Predicate (Of T) Dim returnValue As List (Of T) returnValue = экземпляр. FindAll (матч)

Этот синтаксис включает в себя новый элемент, Предикат (Т). По словам Microsoft, это будет представлять метод ", который определяет набор критериев и определяет, является ли указанный объект соответствует этим критериям. "Другими словами, вы можете создать любой код, который найдет что-то в список. Я закодировал Предикат (Т) найти что-нибудь в "Пиво" категория.

Вместо вызова кода делегата для каждого элемента в списке, Найти все возвращает весь Список (T) содержащий только совпадения, которые являются результатом вашего Предикат (Т). Это ваш код, чтобы определить этот второй Список (T) и сделать что-нибудь с этим. Мой код просто добавляет элементы в ListBox.

Private Sub FindAllButton_Click (отправитель ByVal как система. Объект, ByVal и As System. EventArgs) Обрабатывает FindAllButton. Нажмите ResultList. Предметы. Очистить () ResultList. Предметы. Добавить ("Пример FindAll") ResultList. Предметы. Добавить ("") Dim sublist As List (Of Bottle) sublist = Cabinet. FindAll (AddressOf findBeer) для каждого r As Bottle In подсписка ResultList. Предметы. Добавить (_ р. Марка & "-" & _ r. Имя & "-" & _ r. Категория & "-" & _ r. Размер) Следующий конец Подфункция findBeer (ByVal b As Bottle) _ As Boolean If (b. Category = "Beer") Затем верните True, иначе верните False End If End Function

Пример сортировки

Последний метод, который исследуется в этой статье: Сортировать. Опять же, Microsoft использует терминологию, с которой вы, возможно, не знакомы. На самом деле существует четыре различных перегрузки Сортировать метод:

  • Сортировать()
  • Сортировка (IComparer (T))
  • Сортировка (Сравнение (T))
  • Сортировка (Int32, Int32, IComparer (T))

Это позволяет вам использовать методы сортировки, определенные в .NET Framework для списка, кодировать свои собственные, использовать систему определенное сравнение для типа или сортировка части коллекции с использованием начальной позиции и количества параметр.

В этом примере, поскольку я использую следующий синтаксис для выполнения сортировки, я использую третью перегрузку.

Икс. Name.x. Имя. CompareTo (г. Имя) (у. Имя)

Я закодировал другого делегата своему собственному компаратору. Так как я хочу сортировать по моим имяЯ извлекаю только это значение из каждого экземпляра бутылка объект, который передается и использовать Сортировка (Сравнение )>)). Сортировать Метод на самом деле переставляет оригинал Список (T). Это то, что обрабатывается после выполнения метода.

Private Sub SortButton_Click (отправитель ByVal как система. Объект, ByVal и As System. EventArgs) Обрабатывает SortButton. Нажмите ResultList. Предметы. Очистить () ResultList. Предметы. Добавить ("Пример сортировки") ResultList. Предметы. Добавить ("") кабинет. Сортировка (AddressOf sortCabinet) для каждого r как бутылки в кабинете ResultList. Предметы. Добавить (_ р. Имя & "-" & _ r. Марка & "-" & _ r. Категория & "-" & _ r. Size) Next End Sub Частная общая функция sortCabinet (_ ByVal x As Bottle, ByVal y As Bottle) As Integer Return x. Имя. CompareTo (г. Имя) Конечная функция

Эти методы были выбраны, чтобы продемонстрировать основные способы, которыми Список (T) фактически закодированы. Однако есть целый ряд других методов. Вот что делает Список (T) так полезно!