Yazılım geliştirirken bazı durumlarda birbirine benzeyen onlarca, hatta yüzlerce veriyi hafızada tutmamız gerekebilir. Örneğin, bir sınıftaki 50 öğrencinin isimlerini veya bir haftanın 7 gününün sıcaklık değerlerini programda saklamak isteyebilirsiniz. Bunun için 50 farklı değişken (string ogrenci1, ogrenci2...) tanımlamak hem çok yorucu hem de kod kalabalığına yol açan mantıksız bir yöntemdir. İşte tam bu noktada imdadımıza programlamanın en güçlü yapılarından biri olan Diziler (Arrays) yetişir.
Bu kapsamlı rehberde, C# programlama dilinde dizilerin ne olduğunu, nasıl tanımlandığını ve Windows Forms kontrolleri (TextBox, ListBox, Button vb.) ile birlikte nasıl kullanılacağını detaylı örneklerle öğreneceksiniz.
Dizi (Array) Nedir?
C# dilinde dizi, aynı tipte (sadece metin, sadece tam sayı vb.) birden çok değeri bellek üzerinde tek bir isim altında tutabilecek bir yapıdır. Dizileri, yan yana dizilmiş ve her birine numara verilmiş posta kutularına veya bir ilaç kutusuna benzetebilirsiniz. Her kutunun içine aynı türden bir veri koyarsınız ve kutunun üzerindeki numarayı (indeks) kullanarak o veriye kolayca ulaşırsınız.
Dizileri kullanmak; veriler üzerinde arama yapma, listeleme, silme, değiştirme ve sıralama gibi işlemleri döngüler (örneğin for veya foreach) yardımıyla çok daha kolay ve hızlı bir şekilde gerçekleştirmemizi sağlar.
Tek Boyutlu Dizilerin Oluşturulması
Bir boyutlu diziler, verileri saklamak için yan yana sıralanmış bellek alanlarından oluşan en temel dizi türüdür. C# dilinde bir dizi oluştururken temelde üç noktaya çok dikkat etmelisiniz:
- Dizinin Tipi: Dizinin içinde hangi tür verilerin saklanacağı (
int,string,double,boolvb.) mutlaka belirtilmelidir. - Dizi Adı: Değişken isimlendirme kurallarına uygun, anlaşılır bir isim verilmelidir (Örneğin numaralar için
okulNumaralari). - Dizinin Kapasitesi: Dizinin içinde kaç adet veri saklanacağı başlangıçta belirtilmelidir.
C#’ta Dizi Tanımlama Kuralı: VeriTipi[] DiziAdi = new VeriTipi[ElemanSayısı];
Örnek Tanımlamalar:
int[] sayilar = new int; // Tam sayı tipinde 10 eleman kapasiteli dizi.
string[] isimler = new string; // Metin tipinde 5 eleman kapasiteli dizi.
bool[] durumlar = new bool; // Mantıksal (True/False) tipinde 4 elemanlı dizi.
C# derleyicisi bir dizi oluşturduğunda, siz henüz içine bir veri eklemeseniz bile bellek alanlarına varsayılan ilk değerleri atar. Bu değerler; metinsel (string) diziler için null, sayısal diziler için 0 ve mantıksal (bool) diziler için false şeklindedir.
Dizilere Değer Aktarma ve İndeks (Index) Mantığı
Dizilerin her bir bölmesinin bir sıra numarası vardır ve bu sıra numaralarına İndeks (Index) adı verilir. Günlük hayatta saymaya 1’den başlasak da, programlama dillerinin çoğunda olduğu gibi C# dilinde de dizilerin indeks numarası daima 0’dan başlar. Yani 5 elemanlı bir dizinin ilk elemanının indeksi 0, son elemanının indeksi ise 4’tür.
Diziye İndeks Kullanarak Değer Atama:
string[] kisiler = new string;
kisiler = "Ayşe"; // Dizinin 1. elemanı
kisiler = "Yusuf"; // Dizinin 2. elemanı
kisiler = "Ahmet"; // Dizinin 3. elemanı
Kısa Yoldan Değer Atama: Eğer dizinin içindeki elemanları en baştan biliyorsanız, diziyi oluştururken değerleri doğrudan küme parantezleri { } içinde de verebilirsiniz:
string[] kisiler = {"Ayşe", "Yusuf", "Ahmet", "Merve", "Mehmet"};
Dikkat Edilmesi Gereken Hata (Sınır Aşımı): Dizilere değer atarken kapasitesini aşmamaya dikkat etmelisiniz. Örneğin 6 elemanlı bir diziye sayilar = 50; şeklinde bir atama yapmaya çalışırsanız (7. elemana erişmeye çalışmak demektir), programınız anında çöker ve “Index was outside the bounds of the array” (Dizin sınırların dışındaydı) şeklinde IndexOutOfRangeException hatası verir,.
C# Windows Form Örneği 1: Kullanıcıları Diziye Ekleme ve Listeleme
Şimdi öğrendiklerimizi görsel bir Windows Form uygulamasında birleştirelim. Amacımız; kullanıcının bir TextBox‘a yazdığı isimleri bir diziye kaydetmek ve ardından bir Button‘a tıklayarak bu dizideki tüm isimleri bir ListBox içerisinde alt alta listelemektir,.
Form Tasarımı:
- 1 adet TextBox (
txtAdSoyad) - 1 adet ListBox (
lstListe) - 2 adet Button (
btnEklevebtnListele)
Arka Plan Kodları:
// Dizi ve indeks değişkenini tüm butonlardan erişilebilmesi için global olarak tanımlıyoruz.
string[] isimler = new string;
int index = 0;
private void btnEkle_Click(object sender, EventArgs e)
{
// Dizinin kapasitesini aşmamak için if ile kontrol ediyoruz
if(index < 5)
{
isimler[index] = txtAdSoyad.Text; // TextBox'taki değeri dizinin sıradaki yerine ekle
index++; // Bir sonraki ekleme için indeksi 1 artır
txtAdSoyad.Clear(); // Kutuyu temizle
MessageBox.Show("Kişi diziye eklendi!");
}
else
{
MessageBox.Show("Dizi kapasitesi doldu! Daha fazla kişi ekleyemezsiniz.");
}
}
private void btnListele_Click(object sender, EventArgs e)
{
lstListe.Items.Clear(); // ListBox'ı temizle
// For döngüsü ile dizinin tüm elemanlarını dolaşıp ListBox'a ekliyoruz
for (int i = 0; i < isimler.Length; i++)
{
if(isimler[i] != null) // Boş olan kayıtları listelememek için kontrol
{
lstListe.Items.Add(isimler[i]);
}
}
}
Önemli Not: Kodda kullandığımız isimler.Length ifadesi, dizinin sahip olduğu toplam eleman sayısını (kapasitesini) bize veren harika bir özelliktir.
Foreach Döngüsü ve Diziler
Dizilerdeki elemanları okumak için genellikle for döngüsü kullanılsa da, C# dilinde diziler üzerinde işlem yapmayı çok daha pratik hâle getiren özel bir döngü vardır: foreach döngüsü.
Foreach döngüsü, dizi elemanlarını ilk elemandan başlayıp son elemana kadar otomatik olarak tek tek dolaşır. İndeks numarası takibi yapmanıza veya sınır aşımı hatası düşünmenize gerek kalmaz.
Örnek Kullanım: Yukarıdaki listeleme butonumuzu foreach ile çok daha kısa yazabiliriz:
private void btnListele_Click(object sender, EventArgs e)
{
lstListe.Items.Clear();
// 'isimler' dizisindeki her bir elemanı sırayla 'kisi' değişkenine aktarır
foreach (string kisi in isimler)
{
if(kisi != null)
{
lstListe.Items.Add(kisi);
}
}
}
Dizilerde Sık Kullanılan Hayat Kurtarıcı Metotlar
C# dilinde dizilerle işlem yaparken kod yazma hızınızı artıracak bazı çok kullanışlı hazır metotlar (fonksiyonlar) ve özellikler bulunur:
- Length: Dizinin toplam eleman sayısını (kapasitesini) verir (
dizi.Length). - Max() / Min(): Sayısal bir dizideki en büyük (
Max) veya en küçük (Min) değeri anında bulur. - Sum(): Sayısal bir dizideki tüm sayıların toplamını hesaplar.
- Average(): Dizideki sayıların ortalamasını bulur.
- Array.Sort(dizi): Dizinin içindeki elemanları küçükten büyüğe (veya A’dan Z’ye) doğru otomatik olarak alfabetik/sayısal sıralar.
- Array.Reverse(dizi): Dizideki elemanların sıralamasını tamamen tersine çevirir (Sondan başa doğru).
Çok Boyutlu Diziler (Matrisler) Nelerdir?
Şu ana kadar öğrendiğimiz diziler tek boyutlu (tek bir satırdan oluşan) dizilerdi. Ancak bazen satır ve sütunlardan oluşan tablo veya matris mantığındaki verilere ihtiyaç duyarız. Örneğin bir satranç tahtası (8×8) veya bir sınıfın vize ve final notları tablosu gibi yapılar Çok Boyutlu Diziler ile ifade edilir.
En sık kullanılanı İki Boyutlu Dizilerdir. İki boyutlu bir dizi tanımlanırken köşeli parantez içine bir virgül , konulur:
// 3 satır ve 4 sütundan (3x4 = 12 elemanlı) oluşan iki boyutlu dizi tanımlaması,
double[,] notlar = new double;
// Değer ataması [Satırİndeksi, Sütunİndeksi] şeklinde yapılır:
notlar = 85; // 0. satır, 0. sütun
notlar = 90; // 0. satır, 1. sütun
Tıpkı tek boyutlu dizilerde olduğu gibi, çok boyutlu dizilerde de hem satır hem de sütun indeks numaraları daima 0’dan başlar.
Özet
C# ve Windows Forms teknolojisinde Diziler (Arrays), aynı amaca hizmet eden çok sayıdaki veriyi tek bir çatı altında düzenli bir şekilde tutmak için vazgeçilmez bir araçtır. Değişken kalabalığını ortadan kaldıran diziler sayesinde verileri ListBox, ComboBox ve DataGridView gibi form kontrollerine aktarmak inanılmaz derecede kolaylaşır. İndekslerin daima 0’dan başladığını ve sınırların aşılmaması gerektiğini unutmadan, for ve foreach döngüleriyle bolca pratik yaparak dizilerin ustası olabilirsiniz. İyi kodlamalar dileriz!





