Udostępnij za pośrednictwem


Inicjatory kolekcji (Visual Basic)

Inicjatory kolekcji dostarczyć skróconej składni, która umożliwia tworzenie kolekcji i wypełniania wstępnego zestawu wartości.Inicjatory kolekcji są przydatne podczas tworzenia kolekcji z zestaw znanych wartości, na przykład listy Opcje menu lub kategorie, wstępnego zestawu wartości numeryczne, listy statycznej ciągi znaków, takich jak dzień lub miesiąc nazwy lub lokalizacji geograficznych, takich jak wykaz państw, który jest używany do sprawdzania poprawności.

Aby uzyskać więcej informacji na temat kolekcji, zobacz Kolekcje (C# i Visual Basic).

Inicjator kolekcji można zidentyfikować za pomocą From słowa kluczowego następują nawiasy klamrowe ({}).Jest to podobne do składni literału array, opisana w Tablice w Visual Basic.W poniższych przykładach przedstawiono różne sposoby użycia kolekcji inicjatorów do tworzenia zbiorów.

' 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"}}

[!UWAGA]

C# zawiera również inicjatory kolekcji.Inicjatory kolekcji C# zapewnia taką samą funkcjonalność jak inicjatory kolekcji Visual Basic.Aby uzyskać więcej informacji na temat inicjatory kolekcji C#, zobacz Inicjatory obiektów i kolekcji (Przewodnik programowania w języku C#).

Składnia

Inicjator zbierania składa się z listy wartości rozdzielanych przecinkami, które są ujęte w nawiasy klamrowe ({}), poprzedzonego From słowa kluczowego, jak pokazano w poniższym kodzie.

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

Podczas tworzenia kolekcji, takie jak List lub Dictionary, jak pokazano w poniższym kodzie, musisz podać typ kolekcji przed inicjator kolekcji.

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

[!UWAGA]

Nie można połączyć zarówno inicjator zbierania i inicjator obiektu, do zainicjowania tego samego obiektu kolekcji.Aby zainicjować obiekty w inicjatorze kolekcji można użyć obiektu inicjatorów.

Tworzenie kolekcji za pomocą inicjowania kolekcji

Podczas tworzenia kolekcji za pomocą inicjatora zbierania, każda wartość, która jest dostarczany w inicjatorze kolekcji jest przekazywana do odpowiednich Add metody kolekcji.Na przykład, jeśli utworzysz List za pomocą inicjatora zbierania, każda wartość string w inicjator kolekcji jest przekazywana do Add metody.Jeśli chcesz utworzyć kolekcję za pomocą inicjatora kolekcji określony typ musi być typu kolekcji ważne.Typy kolekcji ważne Przykładami klas, które implementują IEnumerable interfejsu lub dziedziczą CollectionBase klasy.Określony typ musi także narazić Add metodę, która spełnia następujące kryteria.

  • Add z zakresu, w którym inicjator kolekcji jest wywoływana metoda musi być dostępne.Add Metoda nie ma być publicznie, jeśli używasz inicjator kolekcji w scenariuszu, którym można uzyskać dostęp do metod zbierania publiczno-.

  • Add Metoda musi być członka wystąpienia lub Shared Członkowskich Klasa kolekcji lub metodę rozszerzenia.

  • Add Metoda musi istnieć, mogą zostać dopasowane, oparte na regułach rozdzielczość przeciążenie, do typów, które są dostarczane w inicjatorze kolekcji.

Na przykład, poniższy przykład kodu pokazuje, jak utworzyć List(Of Customer) kolekcji za pomocą inicjatora kolekcji.Gdy kod jest uruchomione, każda Customer obiekt jest przekazywany do Add(Customer) metody rodzajowe listy.

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/")
    }

Poniższy przykład kodu pokazuje równoważny kod, który nie używa inicjatora kolekcji.

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/"))

Jeśli ta kolekcja zawiera Add metodę, która posiada parametry, które odpowiadają konstruktora dla Customer obiektu można zagnieździć wartości parametrów dla Add metody w kolekcji inicjatorów, zgodnie z opisem zamieszczonym w następnej sekcji.Jeśli kolekcja nie ma takiego Add metody, można go utworzyć jako metoda rozszerzenie.Na przykład sposób tworzenia Add metody jako metoda rozszerzenie dla kolekcji, zobacz Porady: tworzenie i dodawanie metody rozszerzania wykorzystywanej przez inicjator kolekcji (Visual Basic).Przykładem sposobu utworzenia kolekcji niestandardowej, używany z inicjatora kolekcji, zobacz Porady: tworzenie kolekcji wykorzystywanej przez inicjator kolekcji (Visual Basic).

Zagnieżdżanie kolekcji inicjatorów

Można zagnieździć wartości wewnątrz inicjatora kolekcji do identyfikowania określonego przeciążenie z Add metody zbierania, który jest tworzony.Wartości przekazanych do Add metody być oddzielone przecinkami i wpisane w nawiasie klamrowym ({}), jak należy inicjatora tablicy literal lub kolekcji.

Podczas tworzenia kolekcji za pomocą wartości zagnieżdżonych, każdy element listy zagnieżdżonej wartość jest przekazywana jako argument do Add metodę, która pasuje do typu elementu.Na przykład, poniższy przykład kodu tworzy Dictionary , w którym klawisze są typu Integer i wartości są typu String.Każdy list zagnieżdżonych wartość jest dopasowywane do Add metoda Dictionary.

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

W poprzednim przykładzie kodu odpowiada następujący kod.

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

Tylko wartości zagnieżdżonych list z pierwszego poziomu zagnieżdżania są wysyłane do Add metodę typu kolekcji.Głębsze poziomów zagnieżdżenia są traktowane jako literały tablicowe i list wartości zagnieżdżone nie są dopasowywane do Add metody kolekcji.

Tematy pokrewne

Tytuł

Opis

Porady: tworzenie i dodawanie metody rozszerzania wykorzystywanej przez inicjator kolekcji (Visual Basic)

Pokazuje, jak utworzyć metodę rozszerzenia o nazwie Add , można wypełnić kolekcji z wartościami z inicjatora kolekcji.

Porady: tworzenie kolekcji wykorzystywanej przez inicjator kolekcji (Visual Basic)

Pokazuje, jak i możliwość korzystania z inicjatora zbierania przez łącznie z Add metoda w klasie zbierania, który implementuje IEnumerable.

Zobacz też

Zadania

Porady: inicjowanie zmiennej tablicy w języku Visual Basic

Porady: tworzenie listy elementów

Informacje

New — Operator (Visual Basic)

Koncepcje

Inicjatory obiektów: typy nazwane i anonimowe (Visual Basic)

Właściwości zaimplementowane automatycznie (Visual Basic)

Wnioskowanie o typie lokalnym (Visual Basic)

Typy anonimowe (Visual Basic)

Wprowadzenie do LINQ w Visual Basic

Inne zasoby

Kolekcje (C# i Visual Basic)

Tablice w Visual Basic