Partilhar via


Inicializadores de Coleção (Visual Basic)

Os inicializadores de coleção fornecem uma sintaxe encurtada que lhe permite criar uma coleção e povoá-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 ou categorias de menu, um conjunto inicial de valores numéricos, uma lista estática de cordas como nomes de dia ou mês, ou localizações geográficas como uma lista de estados que é usado para validação.

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

Identifica um inicializador de recolha utilizando a From palavra-chave seguida de aparelhos ({}). Isto é semelhante à sintaxe literal de matriz que é descrita em Arrays. Os exemplos a seguir mostram várias formas de usar os inicializadores de recolha 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"}}

Nota

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

Syntax

Um inicializador de recolha consiste numa lista de valores separados por vírgula que são incluídos em aparelhos ({}), precedidos pela From palavra-chave, como indicado no código seguinte.

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

Quando criar uma coleção, como a List<T> ou a Dictionary<TKey,TValue>, deve fornecer o tipo de recolha antes do inicializador de recolha, como mostra o código seguinte.

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

Nota

Não é possível combinar um inicializador de recolha e um inicializador de objetos para inicializar o mesmo objeto de recolha. Pode utilizar os inicializadores de objetos para inicializar objetos num inicializador de recolha.

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

Quando se cria uma coleção utilizando um inicializador de recolha, cada valor que é fornecido no inicializador de recolha é passado para o método adequado Add da coleção. Por exemplo, se criar um usando um List<T> inicializador de coleção, cada valor de corda no inicializador de coleção é passado para o Add método. Se pretender criar uma coleção utilizando um inicializador de recolha, o tipo especificado deve ser um tipo de recolha válido. Exemplos de tipos de recolha válidos incluem classes que implementam a IEnumerable<T> interface ou herdam a CollectionBase classe. O tipo especificado deve também expor um Add método que satisfaça os seguintes critérios.

  • O Add método deve estar disponível a partir do âmbito em que o inicializador de recolha está a ser chamado. O Add método não tem de ser público se estiver a utilizar o inicializador de recolha num cenário em que os métodos não públicos da coleção possam ser acedidos.

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

  • Add Deve existir um método que possa ser acompanhado, com base nas regras de resolução de sobrecargas, com os tipos fornecidos no inicializador de recolha.

Por exemplo, o seguinte exemplo de código mostra como criar uma List(Of Customer) coleção utilizando 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 seguinte exemplo de código mostra código equivalente que não utiliza um inicializador de recolha.

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 combinem com o construtor do Customer objeto, pode nidificar os valores dos parâmetros para o método dentro dos Add inicializadores de recolha, como discutido na secção seguinte. Se a coleção não tiver tal Add método, pode criar um como método de extensão. Para um exemplo de como criar um método de extensão Add como método de extensão para uma coleção, consulte Como: Criar um método de extensão de adicionar utilizado por um inicializador de coleção. Para 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 nidificação

Pode nidificar valores dentro de um inicializador de recolha para identificar uma sobrecarga específica de um Add método para a coleção que está a ser criada. Os valores passados ao Add método devem ser separados por vírgulas e fechados em aparelhos ({}), como faria num conjunto literal ou inicializador de recolha.

Quando se cria uma coleção utilizando valores aninhados, cada elemento da lista de valor aninhado é passado como argumento ao método que corresponde aos Add tipos de elementos. Por exemplo, o seguinte exemplo de código cria um Dictionary<TKey,TValue> em que as teclas são de tipo Integer e os valores são de tipo String. Cada uma das listas de valor aninhada é compatível com o Add método para .Dictionary

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

O exemplo de código anterior é equivalente ao seguinte código.

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

Apenas as listas de valor aninhados do primeiro nível de nidificação são enviadas para o Add método para o tipo de recolha. Os níveis mais profundos de nidificação são tratados como literais de matriz e as listas de valor aninhados não são correspondidas ao Add método de qualquer coleção.

Título Descrição
Como: Criar um método de extensão de adicionar usado por um inicializador de coleção Mostra como criar um método de extensão chamado Add que pode ser usado para povoar 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 permitir a utilização de um inicializador de recolha, incluindo um Add método numa classe de recolha que implementa IEnumerable.

Ver também