Visão geral sobre inicializadores de coleção (Visual Basic)
Inicializadores de coleção fornecer uma sintaxe abreviada que lhe permite criar uma coleção e preenchê-lo com um conjunto inicial de valores. Inicializadores de coleção são úteis quando você estiver criando uma coleção de um conjunto de valores conhecidos, por exemplo, uma lista de categorias ou opções de menu , um conjunto inicial de valores numéricos, uma lista estático de seqüências de caracteres, como dia ou nomes de meses ou localizações geográficas, como uma lista de estados que é usado para validação.
Você identificar um inicializador de coleção usando o From palavra-chave , seguido por chaves ({}). Isso é semelhante à sintaxe literal de matriz que é descrito em Matrizes no 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çã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 a coleção inicializadores de C#, consulte Objeto e coleção inicializadores (guia de programação de C#). |
Syntax
Um inicializador de coleção consiste em uma lista de valores separados por vírgula-que são colocadas entre chaves ({}), sejam precedidas pela From palavra-chave, como mostra o código a seguir.
Dim names As New List(Of String) From {"Christa", "Brian", "Tim"}
Quando você criar uma coleção, como um List<T> ou Dictionary<TKey, TValue>, você deve fornecer o tipo de coleção antes do inicializador de coleção , como mostra o 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 |
---|
Você não pode combinar um inicializador de coleção e um inicializador de objeto para inicializar o mesmoobjetode 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 cada valor fornecido no inicializador de coleção criar uma coleção usando um inicializador de coleção , é passado para o apropriado Addomé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 coleção , o tipo especificado deve ser o tipo decoleção válido. Exemplos de tipos decoleção válidode classes que implementam o IEnumerable<T>interface ou herdar o CollectionBaseclasse. O tipo especificado também deve expor um deAddmétodo atende aos critérios a seguir.
O Add método deve estar disponível do escopo no qual o inicializador de 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 onde não-de métodos públicos da coleção podem ser acessados.
O Addmétodo deve ser um membro de instância ou Shared membro declassede coleçãoou ummétodode extensão.
Um Add método deve existir que pode corresponder, com base em regras de resolução sobrecarga , para os tipos que são fornecidos em um inicializador de coleção .
Por exemplo, o seguinte código exemplo mostra como criar um List(Of Customer)acoleção usando um inicializador de coleção . Quando o código é executado, cada Customerobjeto é passado para o Add(Customer)ométodo de lista genérico.
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 Addmétodo que tem parâmetros que correspondem ao construtor para o Customeroobjeto, você poderia aninhar valores de parâmetro para o Addmétodo dentro da coleção inicializadores, conforme discutido na próxima seção. Se a coleção não tem como um Addmétodo, você pode criar um como ummétodode extensão. Para obter um exemplo de como criar um Addmétodo comométodo de extensãopara uma coleção, consulte Como: Criar um método para adicionar extensão usado por um inicializador de coleção (Visual Basic). Para obter um exemplo de como criar uma coleção personalizada que pode ser usado com um inicializador de coleção , consulte Como: Criar uma coleção usada por um inicializador de coleção (Visual Basic).
Inicializadores de coleção de aninhamento
Você pode aninhar valores dentro de um inicializador de coleção para identificar um específico sobrecarga de um Add método da coleção que está sendo criada. Os valores passados para o Add método devem ser separados por vírgulas e delimitados por chaves ({}), como faria em um array literal ou coleção inicializador.
Quando você criar uma coleção usando aninhados valores, cada elemento da lista aninhada valor é passado como um argumento para o Addométodo que corresponda a 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 aninhadas valor corresponde a 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 para o 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 deAddmétodo para o tipo de coleção . Mais níveis de aninhamento são tratados como literais de matriz e as listas de valor aninhados não são comparadas com o Addométodo de nenhuma coleção.
Consulte também
Tarefas
Como: Criar um método para adicionar extensão usado por um inicializador de coleção (Visual Basic)
Como: Criar uma coleção usada por um inicializador de coleção (Visual Basic)
Como: Inicializar variáveis de matriz no Visual Basic
Como: Criar uma lista de itens
Referência
Conceitos
Inicializadores de objeto: Tipos nomeados e anônimos (Visual Basic)
Propriedades autoimplementadas (Visual Basic)