using _18_ListCollectionType.Models;
namespace _18_ListCollectionType
{
internal class Program
{
static void Main(string[] args)
{
// Collections (koleksiyonlar) dinamik array (dizi) objeleridir.
// Dizilerin eleman sayıları sabitken koleksiyonların eleman sayıları eleman ekleme
// ve çıkarma işlemlerine göre dinamik olarak değişir.
// ArrayList, List, Dictionary ve Hashtable başlıca bazı koleksiyon tipleridir.
// Queue (ilk eklenen ilk çıkar) ve Stack (ilk eklenen son çıkar) ise
// ihtiyaca özel kullanılabilecek koleksiyon tiplerindendir.
#region Type Safe (Generic) List Collection Type
// type safe (tip güvenli) koleksiyonların içerisindeki eleman tipleri bellidir ve aynıdır,
// genelde type safe collections kullanılır
List<string> sehirler = new List<string>(); // <> içerisinde koleksiyon elemanlarının tipi belirlenir
// ve sadece bu tipte elemanlar koleksiyonda saklanabilir,
// önce içerisinde hiç bir eleman olmayan bir şehir listesi oluşturuyoruz,
// bu durumda sehirler'in Count yani eleman sayısı özelliği 0 olacaktır
// daha sonra ArrayList'te olduğu gibi Add methodu ile listenin sonuna listenin eleman tipi üzerinden
// istediğimiz kadar eleman ekliyoruz
sehirler.Add("Ankara");
sehirler.Add("İstanbul");
sehirler.Add("İzmir");
//sehirler.Add(6); // ArrayList'in aksine hata fırlatacaktır
Console.WriteLine("Şehirler String Koleksiyonu:");
// 3 elemanlı List<string> (List of string, yani string listesi, şeklinde de okunabilir) objesini konsola yazdırma
foreach (var sehir in sehirler)
{
Console.WriteLine(sehir);
}
Console.WriteLine();
// Array ve ArrayList'te olduğu gibi index üzerinden listenin istenilen elemanına ulaşılabilir
Console.WriteLine(sehirler[1]); // konsola İstanbul yazdıracaktır
Console.WriteLine();
// içerisindeki eleman tipleri Sehir olan List (List of Sehir şeklinde de okunabilir)
List<Sehir> sehirListesi = new List<Sehir>() // şehir listesini oluştururken elemanlarını dolduruyoruz
{
new Sehir(1, "Adana"), // istenirse parametreli constructor üzerinden yeni bir şehir objesi oluşturulabilir
new Sehir() // istenirse default constructor kullanıldıktan sonra özellik atamaları üzerinden
// yeni bir şehir objesi oluşturulabilir
{
PlakaNo = 7,
Adi = "Antalya"
},
new Sehir(26, "Eskişehir")
};
// eğer istenirse daha sonra listenin sonuna aşağıdaki farklı yöntemler üzerinden Sehir tipinde elemanlar eklenebilir
// 1. yöntem: önce sehirElemani referans değişkeni üzerinden Sehir objesi oluşturuyoruz,
// istenirse Sehir class'ının parametreli constructor'ı üzerinden de obje new'lenebilir
Sehir sehirElemani = new Sehir()
{
PlakaNo = 9,
Adi = "Aydın"
};
// daha sonra Add methoduna sehirElemani referans değişkenini parametre olarak göndererek sehirListesi'ne ekliyoruz
sehirListesi.Add(sehirElemani);
// 2. yöntem: oluşturduğumuz Sehir tipindeki objeyi parametre olarak Add methoduna göndererek sehirListesi'ne ekliyoruz,
// istenirse Sehir class'ının parametreli constructor'ı üzerinden de obje new'lenebilir
sehirListesi.Add(new Sehir()
{
PlakaNo = 16,
Adi = "Bursa"
});
Console.WriteLine("Şehirler Obje Koleksiyonu:");
// 5 elemanlı şehir listesini konsola yazdırma
for (int i = 0; i < sehirListesi.Count; i++) // koleksiyon eleman sayısı için Count özelliği kullanılır
{
//Console.WriteLine(sehirListesi[i]); // Sehir class'ında Object class'ının ToString methodunu override
// etmediğimiz için sehirListesi'nin i. index'teki elemanı olan
// Sehir tipindeki objenin namespace'i ile birlikte tipini yazdırır
// (_17_ListCollectionType.Models.Sehir)
// şehir bilgilerini yazdırmak için sehirListesi'ndeki Sehir tipindeki objenin property'lerini kullanmamız gerek,
// veya Sehir class'ında ToString methodunu override ederek de obje bilgilerini yazdırabiliriz
Console.WriteLine("Plaka: " + sehirListesi[i].PlakaNo + ", Ad: " + sehirListesi[i].Adi);
}
Console.WriteLine();
// index üzerinden koleksiyondaki istediğimiz elemana ulaşabiliriz
Sehir indexUzerindenSehir = sehirListesi[2];
Console.WriteLine($"Plaka: {indexUzerindenSehir.PlakaNo}, Ad: {indexUzerindenSehir.Adi}");
// konsola "Plaka: 26, Ad: Eskişehir" yazdıracaktır
#endregion
}
}
}