Koleksiyon Başlatıcıları (Visual Basic)

Koleksiyon başlatıcıları , bir koleksiyon oluşturmanızı ve bir ilk değer kümesiyle doldurmanızı sağlayan kısaltılmış bir sözdizimi sağlar. Koleksiyon başlatıcıları, bir dizi bilinen değerden koleksiyon oluştururken (örneğin, menü seçenekleri veya kategorilerinin bir listesi, bir ilk sayısal değerler kümesi, gün veya ay adları gibi) statik bir liste veya doğrulama için kullanılan durumların listesi gibi coğrafi konumlar için yararlıdır.

Koleksiyonlar hakkında daha fazla bilgi için bkz. koleksiyonlar.

Anahtar ayracını From ve ardından kaşlı ayraçları kullanarak bir koleksiyon başlatıcısı belirlersiniz {} . Bu, dizilerbölümünde açıklanan dizi değişmez sözdizimine benzerdir. Aşağıdaki örneklerde Koleksiyonlar oluşturmak için koleksiyon başlatıcıları kullanmanın çeşitli yolları gösterilmektedir.

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

Not

C# Ayrıca koleksiyon başlatıcıları sağlar. C# koleksiyon başlatıcıları Visual Basic koleksiyonu başlatıcılarına benzer işlevleri sağlar. C# koleksiyon başlatıcıları hakkında daha fazla bilgi için bkz. nesne ve koleksiyon başlatıcıları.

Syntax

Bir koleksiyon başlatıcısı, {} From aşağıdaki kodda gösterildiği gibi, önünde anahtar sözcüğünden sonra gelen ve ayraç () içine alınmış bir virgülle ayrılmış değerler listesinden oluşur.

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

Veya gibi bir koleksiyon oluşturduğunuzda List<T> Dictionary<TKey,TValue> , aşağıdaki kodda gösterildiği gibi koleksiyon başlatıcıdan önce koleksiyon türünü sağlamanız gerekir.

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

Not

Aynı koleksiyon nesnesini başlatmak için hem koleksiyon başlatıcısı hem de bir nesne Başlatıcısı birleştiremezsiniz. Nesne başlatıcılarının bir koleksiyon başlatıcısındaki nesneleri başlatmak için kullanabilirsiniz.

Koleksiyon Başlatıcısı kullanarak koleksiyon oluşturma

Koleksiyon Başlatıcısı kullanarak bir koleksiyon oluşturduğunuzda, koleksiyon başlatıcısında sağlanan her bir değer Add koleksiyonun uygun yöntemine geçirilir. Örneğin, bir List<T> koleksiyon başlatıcısı kullanarak bir oluşturursanız, koleksiyon başlatıcısındaki her bir dize değeri Add yöntemine geçirilir. Koleksiyon Başlatıcısı kullanarak bir koleksiyon oluşturmak istiyorsanız, belirtilen tür geçerli bir koleksiyon türü olmalıdır. Geçerli koleksiyon türü örnekleri, IEnumerable<T> arabirimini uygulayan veya sınıfını devraldığı sınıfları içerir CollectionBase . Belirtilen tür Ayrıca Add aşağıdaki ölçütlere uyan bir yöntemi kullanıma sunmalıdır.

  • AddYöntemi, koleksiyon başlatıcısının çağrıldığı kapsamdan kullanılabilir olmalıdır. Koleksiyon Add başlatıcısı, koleksiyonun genel olmayan metotlarına erişilebilen bir senaryoda kullanılıyorsa, yöntemin ortak olması gerekmez.

  • AddYöntem bir örnek üyesi veya Shared koleksiyon sınıfının üyesi ya da bir genişletme yöntemi olmalıdır.

  • Bir Add Yöntem, aşırı yükleme çözümleme kurallarına göre, koleksiyon başlatıcısında sağlanan türlere göre eşleştirileceği olmalıdır.

Örneğin, aşağıdaki kod örneği List(Of Customer) bir koleksiyon başlatıcısı kullanarak nasıl koleksiyon oluşturulacağını göstermektedir. Kod çalıştırıldığında, her Customer nesne Add(Customer) genel liste yöntemine geçirilir.

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

Aşağıdaki kod örneği, bir koleksiyon başlatıcısı kullanmayan denk kodu gösterir.

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

Koleksiyonda Add nesnenin oluşturucusuyla eşleşen parametrelere sahip bir yöntem varsa Customer , Add sonraki bölümde açıklandığı gibi, yöntemin parametre değerlerini koleksiyon başlatıcıları içinde iç içe geçirebilirsiniz. Koleksiyonda böyle bir Add Yöntem yoksa, bir uzantı yöntemi olarak bir tane oluşturabilirsiniz. AddBir koleksiyon için uzantı yöntemi olarak bir yöntemin nasıl oluşturulacağı hakkında bir örnek için bkz. nasıl yapılır: koleksiyon başlatıcısı tarafından kullanılan bir uzantı ekleme yöntemi oluşturma. Bir koleksiyon başlatıcısıyla kullanılabilecek özel bir koleksiyonun nasıl oluşturulacağı hakkında bir örnek için bkz. nasıl yapılır: koleksiyon başlatıcısı tarafından kullanılan koleksiyon oluşturma.

Koleksiyon Başlatıcıları iç içe

Oluşturulan koleksiyon için bir yöntemin belirli bir aşırı yüklemesini tanımlamak üzere değerleri bir koleksiyon başlatıcısı içinde iç içe geçirebilirsiniz Add . Yöntemine geçirilen değerler, Add {} bir dizi sabit değerinde veya koleksiyon başlatıcısında yaptığınız gibi, virgülle ayrılmalıdır ve küme ayracı () içine alınmalıdır.

İç içe değerler kullanarak bir koleksiyon oluşturduğunuzda, iç içe değer listesindeki her öğe, Add öğe türleriyle eşleşen yönteme bir bağımsız değişken olarak geçirilir. Örneğin, aşağıdaki kod örneği, Dictionary<TKey,TValue> içinde anahtarların türü olan Integer ve değerleri türünde olan bir oluşturur String . İç içe değer listelerinin her biri Add , için yöntemiyle eşleştirilir Dictionary .

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

Önceki kod örneği aşağıdaki koda eşdeğerdir.

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

İç içe geçme düzeyinden yalnızca iç içe geçmiş değer listeleri, Add koleksiyon türü için metoduna gönderilir. İç içe geçme düzeyleri dizi değişmez değerleri olarak değerlendirilir ve iç içe değer listeleri Add herhangi bir koleksiyonun yöntemiyle eşleştirilmez.

Başlık Açıklama
Nasıl yapılır: Öğe Başlatıcısı Tarafından Kullanılan Bir Uzantı Ekleme Yöntemi Oluşturma AddBir koleksiyonu bir koleksiyon başlatıcısındaki değerlerle doldurmak için kullanılabilecek adlı bir genişletme yönteminin nasıl oluşturulacağını gösterir.
Nasıl yapılır: Öğe Başlatıcısı Tarafından Kullanılan Bir Koleksiyon Oluşturma Uygulayan bir koleksiyon sınıfına bir yöntem ekleyerek bir koleksiyon başlatıcısı kullanımını nasıl etkinleştireceğinizi gösterir Add IEnumerable .

Ayrıca bkz.