Partilhar via


Inicializadores de coleção (Visual Basic)

Os inicializadores de coleção fornecem uma sintaxe abreviada que permite criar uma coleção e preenchê-la com um conjunto inicial de valores. Os inicializadores de coleção são úteis quando você está criando uma coleção a partir 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 cadeias de caracteres, como nomes de dia ou mês, ou localizações geográficas, como uma lista de estados usada para validação.

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

Você identifica um inicializador de coleção usando a From palavra-chave 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

C# também fornece inicializadores de coleção. Os inicializadores de coleção C# fornecem a mesma funcionalidade que os 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írgula, delimitados por chaves ({}) e precedidos pela palavra-chave From, como mostrado no código a seguir.

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

Ao criar uma coleção, como a List<T> ou a 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 deve 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 seguintes critérios.

  • O método Add deve estar disponível no âmbito em que o inicializador da coleção é chamado. O Add método não precisa ser público se você estiver usando o inicializador de coleção em um cenário onde 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.

  • Deve existir um Add método que possa corresponder, com base em regras de resolução de sobrecarga, aos tipos especificados no inicializador da 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 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 tiver um Add método que tenha parâmetros que correspondam ao construtor do Customer objeto, você poderá aninhar valores de parâmetro para o Add método em 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 Add Extension 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.

Inicializadores de coleção de aninhamento

Você pode anidar valores dentro de um inicializador de coleção para identificar uma sobrecarga específica de um método Add para a coleção que está a ser criada. Os valores passados para o Add método devem ser separados por vírgulas e colocados entre chaves ({}), como você faria em um literal de matriz ou 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 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. Cada uma das listas de valores aninhados corresponde ao Add método 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 listas de valores aninhados 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 valores aninhados não correspondem ao Add método de qualquer coleção.

Título Descrição
Como criar um método de extensão Add utilizado 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 o IEnumerable.

Ver também