Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Инициализаторы коллекции предоставляют сокращенный синтаксис, позволяющий создать коллекцию и заполнить ее начальным набором значений. Инициализаторы коллекции полезны при создании коллекции из набора известных значений, например списка параметров меню или категорий, начального набора числовых значений, статического списка строк, таких как имена дней или месяцев, или географические расположения, например список состояний, используемых для проверки.
Дополнительные сведения о коллекциях см. в разделе "Коллекции".
Вы определяете инициализатор коллекции с помощью ключевого From
слова, за которым следует фигурные скобки ({}
). Это похоже на синтаксис литерала массива, описанный в разделе Массивы. В следующих примерах показаны различные способы использования инициализаторов коллекций для создания коллекций.
' Create an array of type String().
Dim winterMonths = {"December", "January", "February"}
' Create an array of type Integer()
Dim numbers = {1, 2, 3, 4, 5}
' Create a list of menu options. (Requires an extension method
' named Add for List(Of MenuOption)
Dim menuOptions = New List(Of MenuOption) From {{1, "Home"},
{2, "Products"},
{3, "News"},
{4, "Contact Us"}}
Замечание
C# также предоставляет инициализаторы коллекций. Инициализаторы коллекций C# предоставляют те же функции, что и инициализаторы коллекций Visual Basic. Дополнительные сведения о инициализаторах коллекций C# см. в разделе "Инициализаторы объектов и коллекций".
Синтаксис
Инициализатор коллекции состоит из списка значений, разделенных запятыми и заключенных в фигурные скобки ({}
), предшествуемого ключевым словом From
, как показано в примере кода.
Dim names As New List(Of String) From {"Christa", "Brian", "Tim"}
При создании коллекции, например a List<T> или a Dictionary<TKey,TValue>, необходимо указать тип коллекции перед инициализатором коллекции, как показано в следующем коде.
Public Class AppMenu
Public Property Items As List(Of String) =
New List(Of String) From {"Home", "About", "Contact"}
End Class
Замечание
Нельзя объединить и инициализатор коллекции, и инициализатор объектов для инициализации одного и того же объекта коллекции. Инициализаторы объектов можно использовать для инициализации объектов в инициализаторе коллекции.
Создание коллекции с помощью инициализатора коллекции
При создании коллекции с помощью инициализатора коллекции каждое значение, предоставленное в инициализаторе коллекции, передается соответствующему Add
методу коллекции. Например, при создании List<T> с помощью инициализатора коллекции каждое строковое значение в инициализаторе коллекции передается методу Add . Если вы хотите создать коллекцию с помощью инициализатора коллекции, указанный тип должен быть допустимым типом коллекции. Примеры допустимых типов коллекций включают классы, реализующие IEnumerable<T> интерфейс или наследующие CollectionBase класс. Указанный тип также должен предоставлять метод Add
, который соответствует следующим критериям.
Метод
Add
должен быть доступен из области, в которой вызывается инициализатор коллекции. МетодAdd
не должен быть общедоступным, если вы используете инициализатор коллекции в сценарии, где к недоступным методам коллекции можно получить доступ.Метод
Add
должен быть членом экземпляра илиShared
членом класса коллекции или методом расширения.Метод
Add
должен существовать, который можно сопоставить с типами, использованными в инициализаторе коллекции, на основе правил разрешения перегрузок.
Например, в следующем примере кода показано, как создать коллекцию List(Of Customer)
с помощью инициализатора коллекции. При запуске кода каждый Customer
объект передается методу Add(Customer)
универсального списка.
Dim customers = New List(Of Customer) From
{
New Customer("City Power & Light", "http://www.cpandl.com/"),
New Customer("Wide World Importers", "http://www.wideworldimporters.com/"),
New Customer("Lucerne Publishing", "http://www.lucernepublishing.com/")
}
В следующем примере кода показан эквивалентный код, который не использует инициализатор коллекции.
Dim customers = New List(Of Customer)
customers.Add(New Customer("City Power & Light", "http://www.cpandl.com/"))
customers.Add(New Customer("Wide World Importers", "http://www.wideworldimporters.com/"))
customers.Add(New Customer("Lucerne Publishing", "http://www.lucernepublishing.com/"))
Если в коллекции есть Add
метод с параметрами, соответствующими конструктору для Customer
объекта, можно вложить значения параметров для Add
метода в инициализаторы коллекции, как описано в следующем разделе. Если в коллекции нет такого Add
метода, его можно создать как метод расширения. Пример создания Add
метода в качестве метода расширения для коллекции см. в статье "Практическое руководство. Создание метода добавления расширения, используемого инициализатором коллекции". Пример создания настраиваемой коллекции, которую можно использовать с инициализатором коллекции, см. в статье "Практическое руководство. Создание коллекции, используемой инициализатором коллекции".
Инициализаторы вложенных коллекций
Можно вложить значения в инициализатор коллекции, чтобы определить конкретную перегрузку метода Add
для создаваемой коллекции. Значения, передаваемые методу Add
, должны быть разделены запятыми и заключены в фигурные скобки ({}
), например, в инициализаторе массива или коллекции.
При создании коллекции с помощью вложенных значений каждый элемент вложенного списка значений передается в качестве аргумента Add
методу, который соответствует типам элементов. Например, в следующем примере кода создается Dictionary<TKey,TValue>, в котором ключи имеют тип Integer
, а значения имеют тип String
. Каждый из вложенных списков значений соответствует методу Add для объекта Dictionary
.
Dim days = New Dictionary(Of Integer, String) From
{{0, "Sunday"}, {1, "Monday"}}
Предыдущий пример кода эквивалентен следующему коду.
Dim days = New Dictionary(Of Integer, String)
days.Add(0, "Sunday")
days.Add(1, "Monday")
Только вложенные списки значений первого уровня вложения отправляются методу Add
для типа коллекции. Более глубокие уровни вложения рассматриваются как литералы массива, а вложенные списки значений не соответствуют методу Add
любой коллекции.
Связанные разделы
Название | Описание |
---|---|
Практическое руководство. Создание метода добавления расширения, используемого инициализатором коллекции | Показывает, как создать метод Add , который можно использовать для заполнения коллекции значениями из инициализатора коллекции. |
Практическое руководство. Создание коллекции, используемой инициализатором коллекции | Показывает, как включить использование инициализатора коллекции, включив Add метод в класс коллекции, реализующий IEnumerable . |
См. также
- коллекции
- Массивы
- Инициализаторы объектов. Именованные и анонимные типы
- Создание оператора
- Автоматически реализованные свойства
- Практическое руководство. Инициализация переменной массива в Visual Basic
- Вывод локальных типов
- Анонимные типы
- Общие сведения о LINQ в Visual Basic
- Практическое руководство. Создание списка элементов