Megosztás a következőn keresztül:


Gyűjtemény inicializálói (Visual Basic)

A gyűjtemény inicializálói egy rövidített szintaxist biztosítanak, amellyel létrehozhat egy gyűjteményt, és feltöltheti egy kezdeti értékkészlettel. A gyűjtemény inicializálói akkor hasznosak, ha egy gyűjteményt ismert értékekből hoz létre, például menübeállítások vagy kategóriák listájából, numerikus értékek kezdeti készletéből, sztringek statikus listájából, például nap- vagy hónapnevekből vagy földrajzi helyekből, például az ellenőrzéshez használt állapotok listájából.

A gyűjteményekről további információt a Gyűjtemények című témakörben talál.

A gyűjtemény inicializálóját a kulcsszó, majd a From kapcsos zárójelek ({}) használatával azonosíthatja. Ez hasonló a Tömbökben leírt tömbkonstansszintaxishoz. Az alábbi példák azt mutatják be, hogyan lehet gyűjtemény inicializálókat használni gyűjtemények létrehozásához.

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

Megjegyzés

A C# gyűjtemény inicializálókat is biztosít. A C#-gyűjtemény inicializálói ugyanazokat a funkciókat biztosítják, mint Visual Basic gyűjtemény inicializálói. További információ a C#-gyűjtemény inicializálóiról: Objektum- és gyűjtemény-inicializálók.

Syntax

A gyűjtemény inicializálója vesszővel{} elválasztott értékek listáját tartalmazza, amelyeket a From kulcsszó előz meg, az alábbi kódban látható módon.

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

Gyűjtemény (például a List<T> vagy a Dictionary<TKey,TValue>) létrehozásakor meg kell adnia a gyűjtemény típusát a gyűjtemény inicializálója előtt, az alábbi kódban látható módon.

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

Megjegyzés

A gyűjtemény inicializálóját és az objektum inicializálóját nem kombinálhatja ugyanazon gyűjteményobjektum inicializálásához. Az objektum-inicializálókkal inicializálhat objektumokat egy gyűjtemény inicializálójában.

Gyűjtemény létrehozása gyűjtemény inicializáló használatával

Ha gyűjtemény inicializálóval hoz létre gyűjteményt, a gyűjtemény inicializálójában megadott összes érték a gyűjtemény megfelelő Add metódusának lesz átadva. Ha például gyűjtemény inicializálóval hoz létre egy List<T> értéket, a rendszer a gyűjtemény inicializálójának minden sztringértékét átadja a Add metódusnak. Ha gyűjteményt szeretne létrehozni gyűjtemény inicializálóval, a megadott típusnak érvényes gyűjteménytípusnak kell lennie. Érvényes gyűjteménytípusok például olyan osztályok, amelyek implementálják az interfészt IEnumerable<T> , vagy öröklik az osztályt CollectionBase . A megadott típusnak olyan metódust Add is közzé kell tennie, amely megfelel az alábbi feltételeknek.

  • A Add metódusnak elérhetőnek kell lennie abból a hatókörből, amelyben a gyűjtemény inicializálóját meghívják. A Add metódusnak nem kell nyilvánosnak lennie, ha a gyűjtemény inicializálóját olyan forgatókönyvben használja, amelyben a gyűjtemény nem nyilvános metódusai elérhetők.

  • A Add metódusnak a gyűjteményosztály példányának vagy Shared tagjának vagy bővítménymetódusának kell lennie.

  • Léteznie kell egy Add metódusnak, amely a túlterhelésfeloldási szabályok alapján megfeleltethető a gyűjtemény inicializálójában megadott típusnak.

Az alábbi példakód például bemutatja, hogyan hozhat létre gyűjteményt List(Of Customer) gyűjtemény inicializáló használatával. A kód futtatásakor a rendszer minden Customer objektumot átad az Add(Customer) általános lista metódusának.

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

Az alábbi példakód olyan egyenértékű kódot mutat be, amely nem használ gyűjtemény inicializálót.

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

Ha a gyűjtemény olyan metódust használ, amely az objektum konstruktorának Customer megfelelő paraméterekkel rendelkezikAdd, a metódus paraméterértékeit beágyazhatja a Add gyűjtemény inicializálóiba, a következő szakaszban leírtak szerint. Ha a gyűjtemény nem rendelkezik ilyen Add módszerrel, bővítménymetódusként is létrehozhat egyet. Ha egy gyűjtemény bővítménymetódusaként szeretne létrehozni egy Add metódust, olvassa el a How to: Create an Add Extension Method Used by a Collection Initializer (Gyűjtemény inicializálója által használt bővítmény hozzáadása) című témakört. Ha egy gyűjtemény inicializálójával használható egyéni gyűjteményt szeretne létrehozni, olvassa el a How to: Create a Collection Initializer (Gyűjtemény inicializálója által használt gyűjtemény létrehozása) című témakört.

Gyűjtemény inicializálóinak beágyazása

Értékeket ágyazhat be egy gyűjtemény inicializálóba, hogy azonosítsa a létrehozott gyűjtemény metódusának Add egy adott túlterhelését. A metódusnak Add átadott értékeket vesszővel kell elválasztani, és kapcsos{} zárójelek () közé kell tenni, ahogyan egy tömbkonstansban vagy gyűjtemény inicializálójában tenné.

Ha beágyazott értékekkel hoz létre gyűjteményt, a beágyazott értéklista minden eleme argumentumként lesz átadva az Add elemtípusoknak megfelelő metódusnak. Az alábbi példakód például létrehoz egy Dictionary<TKey,TValue> olyan kulcsot, amelyben a kulcsok típusa Integer és az értékek típusa String. A beágyazott értéklisták mindegyike megegyezik a AddDictionary.

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

Az előző példakód az alábbi kódnak felel meg.

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

A rendszer csak a beágyazás első szintjéről származó beágyazott értéklistákat küldi el a Add gyűjteménytípus metódusának. A beágyazás mélyebb szintjei tömbkonstansokként vannak kezelve, és a beágyazott értéklisták nem egyeznek meg egyetlen Add gyűjtemény módszerével sem.

Cím Leírás
Útmutató: Bővítmény hozzáadása metódus létrehozása gyűjtemény inicializálója által Bemutatja, hogyan hozhat létre egy olyan bővítménymetódust Add , amellyel feltölthető egy gyűjtemény egy gyűjtemény inicializálójától származó értékekkel.
Útmutató: Gyűjtemény inicializáló által használt gyűjtemény létrehozása Bemutatja, hogyan engedélyezheti a gyűjtemény inicializálójának használatát úgy, hogy belevesz egy metódust egy Add implementáló IEnumerablegyűjteményosztályba.

Lásd még