Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los inicializadores de colección proporcionan una sintaxis abreviada que permite crear una colección y rellenarla con un conjunto inicial de valores. Los inicializadores de colección son útiles cuando se crea una colección a partir de un conjunto de valores conocidos, por ejemplo, una lista de opciones de menú o categorías, un conjunto inicial de valores numéricos, una lista estática de cadenas, como nombres de día o mes, o ubicaciones geográficas como una lista de estados que se usa para la validación.
Para obtener más información sobre las colecciones, consulte Colecciones.
Se identifica un inicializador de colección mediante la From palabra clave seguida de llaves ({}). Esto es similar a la sintaxis literal de matriz que se describe en Matrices. En los ejemplos siguientes se muestran varias maneras de usar inicializadores de colección para crear colecciones.
' 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# también proporciona inicializadores de colección. Los inicializadores de colección de C# proporcionan la misma funcionalidad que los inicializadores de colección de Visual Basic. Para obtener más información sobre los inicializadores de colección de C#, vea Inicializadores de colección y objetos.
Sintaxis
Un inicializador de colección consta de una lista de valores separados por comas que están entre llaves ({}), precedidos por la From palabra clave , como se muestra en el código siguiente.
Dim names As New List(Of String) From {"Christa", "Brian", "Tim"}
Al crear una colección, como un List<T> o un Dictionary<TKey,TValue>, debe proporcionar el tipo de colección antes del inicializador de la colección, como se muestra en el código siguiente.
Public Class AppMenu
Public Property Items As List(Of String) =
New List(Of String) From {"Home", "About", "Contact"}
End Class
Nota:
No se puede combinar un inicializador de colección y un inicializador de objeto para inicializar el mismo objeto de colección. Puede usar inicializadores de objeto para inicializar objetos en un inicializador de colección.
Crear una colección mediante un inicializador de colección
Cuando se crea una colección mediante un inicializador de colección, cada valor proporcionado en el inicializador de la colección se pasa al método adecuado Add de la colección. Por ejemplo, si crea un List<T> mediante un inicializador de colección, cada valor de cadena del inicializador de colección se pasa al Add método . Si desea crear una colección mediante un inicializador de colección, el tipo especificado debe ser un tipo de colección válido. Algunos ejemplos de tipos de colección válidos incluyen clases que implementan la IEnumerable<T> interfaz o heredan la CollectionBase clase . El tipo especificado también debe exponer un Add método que cumpla los siguientes criterios.
El método
Adddebe estar disponible desde el ámbito en el que se está llamando al inicializador de colecciones. ElAddmétodo no tiene que ser público si usa el inicializador de colección en un escenario en el que se puede tener acceso a métodos no públicos de la colección.El
Addmétodo debe ser un miembro de instancia oSharedmiembro de la clase de colección o un método de extensión.Debe existir un método
Addque se pueda asociar, en función de las reglas de resolución de sobrecarga, a los tipos que se proporcionan en el inicializador de colección.
Por ejemplo, en el ejemplo de código siguiente se muestra cómo crear una List(Of Customer) colección mediante un inicializador de colección. Cuando se ejecuta el código, cada Customer objeto se pasa al Add(Customer) método de la 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/")
}
En el ejemplo de código siguiente se muestra código equivalente que no usa un inicializador de colección.
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/"))
Si la colección tiene un método Add que tiene parámetros que coinciden con el constructor para el objeto Customer, los valores de parámetro para el método Add se pueden anidar dentro de inicializadores de colección, como se describe en la sección siguiente. Si la colección no tiene este Add método, puede crear uno como un método de extensión. Para obtener un ejemplo de cómo crear un Add método como un método de extensión para una colección, vea Cómo: Crear un Método de Extensión Add Utilizado por un Inicializador de Colección. Para obtener un ejemplo de cómo crear una colección personalizada que se puede usar con un inicializador de colección, vea How to: Create a Collection Used by a Collection Initializer.
Anidar inicializadores de colección
Puede anidar los valores de un inicializador de colección para identificar una sobrecarga específica de un método Add para la colección que se va a crear. Los valores pasados al método Add deben separarse con comas e incluirse entre llaves ({}), tal como se haría en un literal de matriz o un inicializador de colección.
Cuando se crea una colección mediante valores anidados, cada elemento de la lista de valores anidados se pasa como argumento al Add método que coincide con los tipos de elemento. Por ejemplo, en el ejemplo de código siguiente se crea un Dictionary<TKey,TValue> en el que las claves son de tipo Integer y los valores son de tipo String. Cada una de las listas de valores anidados se asocia al método Add para el Dictionary.
Dim days = New Dictionary(Of Integer, String) From
{{0, "Sunday"}, {1, "Monday"}}
El ejemplo de código anterior es equivalente al código siguiente.
Dim days = New Dictionary(Of Integer, String)
days.Add(0, "Sunday")
days.Add(1, "Monday")
Solo se envían listas de valores anidados del primer nivel de anidamiento al método Add del tipo de colección. Los niveles de anidamiento más profundos se tratan como literales de matriz y no habrá coincidencias de las listas de valores anidados con el método Add de ninguna colección.
Temas relacionados
| Título | Descripción |
|---|---|
| Procedimiento: Crear un método de extensión de adiciones usado por un inicializador de colección | Muestra cómo crear un método de extensión denominado Add que se puede usar para rellenar una colección con valores de un inicializador de colección. |
| Cómo: Crear una colección usada por un inicializador de colección | Muestra cómo habilitar el uso de un inicializador de colección mediante la inclusión de un Add método en una clase de colección que implementa IEnumerable. |
Consulte también
- Colecciones
- matrices de
- Inicializadores de objeto: tipos con nombre y anónimos
- Operador nuevo
- Propiedades implementadas automáticamente
- Cómo: Inicializar una variable de matriz en Visual Basic
- Inferencia de tipos locales
- Tipos anónimos
- Introducción a LINQ en Visual Basic
- Cómo: Crear una lista de elementos