Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A gyűjtemény inicializálói egy rövidített szintaxist biztosítanak, amely lehetővé teszi egy gyűjtemény létrehozását és egy kezdeti értékkészlettel való feltöltését. A gyűjtemény inicializálói akkor hasznosak, ha ismert értékekből hoz létre gyűjteményt, például menübeállítások vagy kategóriák listáját, numerikus értékek kezdeti készletét, sztringek statikus listáját, például nap- vagy hónapneveket vagy földrajzi helyeket, például az érvényesítéshez használt állapotok listáját.
A gyűjteményekről további információt a Gyűjtemények című témakörben talál.
Gyűjtemény inicializálót úgy azonosíthat, hogy a From kulcsszót követően kapcsos zárójeleket ({}) használ. Ez hasonló a Tömbök részben leírt tömbök literálszintaxisához. Az alábbi példák különböző módszereket mutatnak be a gyűjtemények inicializálóinak gyűjtemények létrehozásához való használatára.
' 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 a 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.
Szemantika
A gyűjtemény inicializálója a vesszővel{} elválasztott értékek listáját tartalmazza, amelyeket a From kulcsszó előz meg, a következő kódban látható módon.
Dim names As New List(Of String) From {"Christa", "Brian", "Tim"}
Gyűjtemény (például egy List<T> vagy egy 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:
Nem kombinálhat gyűjtemény inicializálót és objektum inicializálót ugyanazon gyűjteményobjektum inicializálásához. 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> karakterláncot, 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ó használatával, a megadott típusnak érvényes gyűjteménytípusnak kell lennie. Az érvényes gyűjteménytípusok közé tartoznak azok az 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
Addmetó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. AAddmetó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
Addmetódusnak a gyűjteményosztály példányának vagySharedtagjának vagy bővítménymetódusának kell lennie.Olyan
Addmetódusnak kell léteznie, amely a túlterhelés feloldási szabályai alapján megfeleltethető a gyűjtemény inicializálójában megadott típusoknak.
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 tartalmaz, amely az objektum konstruktorának Add megfelelő paraméterekkel rendelkezikCustomer, a metódus paraméterértékeit beágyazhatja a Add gyűjtemény inicializálóiba, ahogyan azt a következő szakaszban tárgyaltuk. 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 az Útmutató: Bővítmény hozzáadása metódus létrehozása gyűjtemény inicializáló által használt használatával című témakört. A gyűjtemény inicializálójával használható egyéni gyűjtemények létrehozására példa : Útmutató: Gyűjtemény inicializáló által használt gyűjtemény létrehozása.
Gyűjtemény inicializálók beágyazása
A gyűjtemény inicializálójának értékeit beágyazva azonosíthatja a létrehozott gyűjtemény metódusának Add egy adott túlterhelését. A Add metódusnak átadott értékeket vesszővel kell elválasztani és kapcsos zárójelek közé kell tenni ({}), ahogyan azt egy tömbkonstans vagy gyűjteményinicializáló esetében 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 megfelel a Add metódusnak.Dictionary
Dim days = New Dictionary(Of Integer, String) From
{{0, "Sunday"}, {1, "Monday"}}
Az előző példakód egyenértékű a következő kóddal.
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.
Kapcsolódó témakörök
| Cím | Leírás |
|---|---|
| Hogyan hozható létre: Olyan bővítménymetódus hozzáadása, amelyet egy gyűjteményinicializáló használ | 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
- Gyűjtemények
- Tömbök
- Objektum inicializálói: Névvel ellátott és névtelen típusok
- Új operátor
- Automatikusan implementált tulajdonságok
- Útmutató: Tömbváltozó inicializálása a Visual Basicben
- Helyi típus következtetése
- Névtelen típusok
- LINQ bemutató a Visual Basic-ben
- Útmutató: Elemek listájának létrehozása