Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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. OAdd
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 ouShared
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ópicos relacionados
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 . |