Compartilhar via


Inicializadores de coleção (Visual Basic)

Inicializadores de coleção fornecem uma sintaxe abreviada que permite criar uma coleção e preenchê-la 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 ou categorias de menu, um conjunto inicial de valores numéricos, uma lista estática de cadeias de caracteres, como nomes de dia ou mês, ou locais geográficos, como uma lista de estados usados para validação.

Para obter mais informações sobre coleções, consulte Coleções.

Você identificará um inicializador de coleção usando a palavra-chave From seguida por chaves ({}). Isso é semelhante à sintaxe literal da matriz descrita em Matrizes. Os exemplos a seguir mostram várias maneiras de usar 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ção

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

Sintaxe

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

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

Ao criar uma coleção, como uma List<T> ou uma Dictionary<TKey,TValue>, você deve fornecer o tipo de coleção antes do inicializador da 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ção

Não é possível combinar um inicializador de coleção e um inicializador de objeto para inicializar o mesmo objeto de coleção. Você pode usar inicializadores de objeto para inicializar objetos em um inicializador de coleção.

Criando uma coleção usando um inicializador de coleção

Quando você cria uma coleção usando um inicializador de coleção, cada valor fornecido no inicializador de coleção é passado para o método apropriado Add da coleção. Por exemplo, se você criar um List<T> usando um inicializador de coleção, cada valor de cadeia de caracteres no inicializador de coleção será passado para o Add método. Se você quiser criar uma coleção usando um inicializador de coleção, o tipo especificado deverá ser um tipo de coleção válido. Exemplos de tipos de coleção válidos incluem classes que implementam a IEnumerable<T> interface ou herdam a 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 no escopo no qual o inicializador da coleção está sendo chamado. O Add método não precisa ser público se você estiver usando o inicializador de coleção em um cenário em que métodos não públicos da coleção podem ser acessados.

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

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

Por exemplo, o exemplo de código a seguir mostra como criar uma 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 contiver um método Add com parâmetros que correspondam ao construtor do objeto Customer, você poderá aninhar valores de parâmetro para o método Add dentro de inicializadores de coleção, conforme discutido na próxima seção. Se a coleção não tiver esse Add método, você poderá criar um como um método de extensão. Para obter um exemplo de como criar um Add método como um método de extensão para uma coleção, consulte Como: Criar um Método de Extensão Add Usado por um Inicializador de Coleção. 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 coleção.

Aninhando inicializadores de coleção

Você pode aninhar valores em um inicializador de coleção para identificar uma sobrecarga específica de um método Add para a coleção que está sendo criada. Os valores passados ao método Add devem ser separados por vírgula e colocados entre chaves ({}), como você faria em uma literal de matriz ou em um inicializador de coleção.

Quando você cria uma coleção usando valores aninhados, cada elemento da lista de valores aninhados é passado como um argumento para o Add método que corresponde aos tipos de elemento. 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. Cada uma das listas de valores aninhados corresponde ao método Add do 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 de valores aninhados do primeiro nível de aninhamento são enviadas ao método Add do tipo de coleção. Níveis de aninhamento mais profundos são tratados como literais de matriz e as listas de valores aninhados não correspondem ao método Add de nenhuma coleção.

Título Descrição
Como criar um método adicionar extensão usado por um inicializador de coleção Mostra como criar um método de extensão chamado Add que pode ser usado para preencher uma coleção com valores de um inicializador de coleção.
Como criar uma coleção usada por um inicializador de coleção Mostra como habilitar 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