Inicializadores de coleção (Visual Basic)

Inicializadores de coleção fornecer uma sintaxe abreviada que permite que você criar uma coleção e preenchê-lo com um conjunto inicial de valores.Inicializadores de coleção são úteis quando você está criando uma coleção de um conjunto de valores conhecidos, por exemplo, uma lista de opções de menu ou categorias, um conjunto inicial de valores numéricos, uma lista estática de seqüências de caracteres, como dia ou nomes de meses ou localizações geográficas, como uma lista de estados que é usada para validação.

Para obter mais informações sobre coleções, consulte Coleções (C# e Visual Basic).

Você identifica um inicializador de coleção usando o From palavra-chave seguida por chaves ({}).Isso é semelhante à sintaxe literal de matriz que é descrito em Matrizes em Visual Basic.Os exemplos a seguir mostram várias maneiras de usar os inicializadores de coleção para criar coleções.

' 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"}}
ObservaçãoObservação

C# também fornece os inicializadores de coleção.Inicializadores de coleção C# fornecem a mesma funcionalidade que os inicializadores de coleção de Visual Basic.Para obter mais informações sobre os inicializadores de coleção C#, consulte Objeto e coleção inicializadores (guia de programação do C#).

Sintaxe

Um inicializador de coleção consiste em uma lista de valores separados por vírgulas que são colocadas entre chaves ({}), sejam precedidas pela From palavra-chave, como mostrado no código a seguir.

Dim names As New List(Of String) From {"Christa", "Brian", "Tim"}

Quando você cria uma coleção, como um List<T> ou um Dictionary<TKey, TValue>, você deve fornecer o tipo de coleção antes do inicializador de coleção, conforme mostrado no código a seguir.

Public Class AppMenu
    Public Property Items As List(Of String) =
        New List(Of String) From {"Home", "About", "Contact"}
End Class
ObservaçãoObservação

Você não pode combinar um inicializador de coleta e um inicializador de objeto para inicializar o mesmo objeto de coleção.Você pode usar os inicializadores de objeto para inicializar objetos em um inicializador de coleção.

A criação de uma coleção usando um inicializador de coleção

Quando você cria uma coleção usando um inicializador de coleta, cada valor fornecido no inicializador de coleção é passado para o apropriado Add método da coleção.Por exemplo, se você criar um List<T> usando um inicializador de coleção, cada valor de seqüência de caracteres em um inicializador de coleção é passado para o Add método.Se você deseja criar uma coleção usando um inicializador de coleta, o tipo especificado deve ser o tipo de coleção válido.Exemplos de tipos de coleção válido de classes que implementam o IEnumerable<T> de interface ou herdar o CollectionBase classe.O tipo especificado também deve expor um Add método que atenda aos critérios a seguir.

  • O Add método deve estar disponível do escopo no qual está sendo chamado o inicializador de coleção.O Add método não precisa ser público, se você estiver usando o inicializador de coleção em um cenário onde os métodos não-públicos da coleção podem ser acessados.

  • O Add o método deve ser um membro de instância ou Shared membro de classe de coleção ou um método de extensão.

  • Um Add método deve existir que pode ser correspondido, com base em regras de resolução de sobrecarga, para os tipos que são fornecidos em um inicializador de coleção.

Por exemplo, o exemplo de código a seguir mostra como criar um List(Of Customer) coleção usando um inicializador de coleção.Quando o código é executado, cada Customer objeto é passado para o Add(Customer) método da lista genérica.

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/")
    }

O exemplo de código a seguir mostra o código equivalente que não usa um inicializador de coleção.

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/"))

Se a coleção tem um Add método que tem parâmetros que correspondem ao construtor para o Customer de objeto, você pode aninhar os valores de parâmetro para o Add método dentro inicializadores de coleção, conforme discutido na próxima seção.Se a coleção não tem como um Add método, você poderá criá-la como um método de extensão.Para obter um exemplo de como criar um Add o método como um método de extensão para uma coleção, consulte Como: criar um adicionar um método de extensão usado por um inicializador de coleta (Visual Basic).Para obter um exemplo de como criar uma coleção personalizada que pode ser usada com um inicializador de coleção, consulte Como: criar uma coleção usada por um inicializador de coleta (Visual Basic).

Inicializadores de coleção de aninhamento

Você pode aninhar valores dentro de um inicializador de coleta para identificar uma sobrecarga específica de um Add método da coleção que está sendo criada.Os valores passados para o Add método deve ser separado por vírgulas e delimitados por chaves ({}), como faria em um inicializador de coleção ou literal de matriz.

Quando você cria uma coleção usando valores aninhadas, cada elemento da lista de valores aninhado é passado como um argumento para o Add método que coincide com os tipos de elementos.Por exemplo, o exemplo de código a seguir cria um Dictionary<TKey, TValue> em que as chaves são do tipo Integer e os valores são do tipo String.Corresponde a cada uma das listas aninhadas valor o Add método para o Dictionary.

Dim days = New Dictionary(Of Integer, String) From
    {{0, "Sunday"}, {1, "Monday"}}

O exemplo de código anterior é equivalente ao código a seguir.

Dim days = New Dictionary(Of Integer, String)
days.Add(0, "Sunday")
days.Add(1, "Monday")

Somente as listas aninhadas de valor do primeiro nível de aninhamento são enviadas para o Add método para o tipo de coleção.Níveis mais profundos de aninhamento são tratados como literais de matriz e as listas de valor aninhados não são compatíveis com o Add método de qualquer coleção.

Tópicos relacionados

Título

Descrição

Como: criar um adicionar um método de extensão usado por um inicializador de coleta (Visual Basic)

Mostra como criar um método de extensão chamado Add que podem ser usados para preencher uma coleção com valores de um inicializador de coleção.

Como: criar uma coleção usada por um inicializador de coleta (Visual Basic)

Mostra como ativar o uso de um inicializador de coleção, incluindo um Add método em uma classe de coleção que implementa IEnumerable.

Consulte também

Tarefas

Como inicializar uma variável de matriz no Visual Basic

Como: criar uma lista de itens

Referência

Operador New (Visual Basic)

Conceitos

Inicializadores de objeto: Nomeados e anônimos tipos (Visual Basic)

Propriedades de auto-implementado (Visual Basic)

Inferência de tipo de local (Visual Basic)

Tipos anônimos (Visual Basic)

Introdução ao LINQ em Visual Basic

Outros recursos

Coleções (C# e Visual Basic)

Matrizes em Visual Basic