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, Tuple
yapısı. Tuple
yapısı sayesinde List
yapı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 yanıt yazın