C# – Generic List Koleksiyon ve Tuple Yapısı

Bu yazımda size Generic List ve Tuple yapısından bahsedeceğim.

C#’da genelde her projede kullandığımız bir koleksiyon olan ArrayList yapısı mevcuttur. Bu yapı ile birçok farklı veri tiplerindeki elemenları liste olarak tutabiliyoruz. Ancak bu koleksiyonun bir dezavantajı vardır. Buda her veriyi Object olarak tuttuğu için, verileri kullanırken unboxing yapmak gerekiyor.

Örnek vermek gerekirse,

ArrayList arrayList = new ArrayList();
arrayList.Add("Ali Erhan");
arrayList.Add(123456);
arrayList.Add(DateTime.Now);

Örnekte gördüğünüz gibi arrayList içerisine string, int ve DateTime türünden 3 veri ekledik. Bu verilerin ne tipte olduğunu bilemediğimiz için program içerisinde kullanırken sorun yaşayabilme ihtimalimiz yüksektir.

ArrayList‘e benzer bir yapıda List yapısıdır. Bu yapı ile aynı tipte verileri tutmak için kullanılır. Bu Generic List yapısında verilerin tiplerini bildiğimiz için, Listeye veri eklerken veya kullanırken boxing/unboxing yapmamıza gerek kalmayacaktır. Bu yapımıza da bir örnek vereyim.

List<int> sayilar = new List<int>();
sayilar.Add(123456);
sayilar.Add(654321);
sayilar.Add(123);
sayilar.Add(321);
//sayilar.Add("Ali");  -- BU TÜRDE BİR VERİ EKLENEMEZ..

Örnekte gördüğünüz gibi int tipinde bir List oluşturduk ve içerisine veriler ekledik. Son satırda yorum satırı olarak ayarladığım //sayilar.Add("Ali"); satırı eğer yorum satırı olmasaydı, bu satır derlenirken veya dinamik bir yapı ise çalışırken hata verecektir.

 

Şimdi ise genelde sabit değerlerde kullandığımız, DataSource olarak kısa çözümler olabilen bir yapıdan bahsedeceğim, Tupleyapısı. Tupleyapısı sayesinde Listyapısının aynısını, birden çok sütunlu List gibi düşünebilirsiniz. Örnek vermek gerekirse,

var listStok = new List<Tuple<int, string>>();

listStok.Add(Tuple.Create(0, "Ham Madde"));
listStok.Add(Tuple.Create(1, "Yarı Mamül"));
listStok.Add(Tuple.Create(2, "Son Ürün"));

Örnekte gördüğünüz gibi bir List içerisinde Tuple ile int ve string tipindeki verileri sıralı şekilde tutabiliyoruz. Burdaki avantajımız, verilerin hatalı girilmesini, tiplerinin biliniyor olmasını ve bu listeyi bir DataSource olarak istediğimiz komponente gösterebiliyor olmamız. Örnek verecek olursak bir listbox’ı doldurup DisplayMember ve ValueMember değerlerini kullanabiliriz.

listBox1.DataSource = listStok;  
listBox1.ValueMember = "Item1";
listBox1.DisplayMember = "Item2";

Örnekte gördüğünüz gibi listbox’a aktardığımız veride görünen string iken seçili value değeri int ayarlanmış olur.

Bu konuda aklınıza takılan soruları yorumlarda sorabilirsiniz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.