C# dizi ve List farkı, temel olarak eleman sayısının nasıl yönetildiğiyle ilgilidir. Dizi oluşturulduktan sonra uzunluğu sabit kalır, ancak mevcut elemanların değerleri değiştirilebilir. List<T> ise eleman ekleme ve silme ihtiyacının bulunduğu durumlarda kullanılabilen, eleman sayısı değişebilen bir koleksiyondur.
Her iki yapıda da elemanlara sıfırdan başlayan indekslerle erişilir. Seçim yaparken eleman sayısının sabit olup olmadığını, sonradan ekleme veya silme gerekip gerekmediğini ve eleman sayısını hangi özellikle takip edeceğini değerlendirebilirsin.
Dizi ile List<T> arasındaki temel fark nedir?

Dizi, aynı türden birden fazla değeri belirli bir uzunlukta tutar. Dizi oluşturulurken uzunluğu belirlenir ve mevcut dizi nesnesinin eleman sayısı sonradan değiştirilemez. Örneğin dört elemanlı bir int dizisinin geçerli indeksleri 0, 1, 2 ve 3 olur.
Dizinin uzunluğu sabittir, eleman değerleri değişebilir
Dizinin uzunluğunun sabit olması, içindeki değerlerin değiştirilemeyeceği anlamına gelmez. notlar[1] ifadesiyle ikinci elemana erişebilir ve bu elemana yeni bir değer atayabilirsin. Ancak diziye doğrudan yeni bir beşinci eleman ekleyemezsin. Dizinin toplam eleman sayısını öğrenmek için Length özelliği kullanılır. Tek boyutlu bir dizide Length, dizideki eleman sayısını verir.
List<T> ile eleman sayısı değiştirilebilir
List<T>, türü T ile belirtilen değerleri tutar. Örneğin List<int> yalnızca tam sayılarla çalışır. Listeye Add ile yeni eleman ekleyebilir, Remove ile bir elemanı kaldırabilirsin. Listede belirli bir konumdaki değere diziye benzer biçimde indeksle erişilir. Listenin o anda kaç eleman içerdiğini öğrenmek için Count özelliği kullanılır.
Aşağıdaki örnekte her iki yapıda da indeksle değer değiştirme gösteriliyor. Dizi sabit uzunluğunu korurken listeye bir eleman ekleniyor ve başka bir eleman siliniyor.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
int[] dizi = { 10, 20, 30 };
List<int> liste = new List<int> { 10, 20, 30 };
dizi[1] = 25;
liste[1] = 25;
liste.Add(40);
liste.Remove(10);
Console.WriteLine($"Dizi[1]: {dizi[1]}");
Console.WriteLine($"Dizi Length: {dizi.Length}");
Console.WriteLine($"Liste[1]: {liste[1]}");
Console.WriteLine($"Liste Count: {liste.Count}");
}
}
Beklenen çıktı:
Dizi[1]: 25
Dizi Length: 3
Liste[1]: 25
Liste Count: 3
Bu örnekte listenin eleman sayısı önce Add ile artmış, ardından Remove ile azalmıştır. Dizide ise yalnızca ikinci elemanın değeri değiştirilmiş ve Length değeri 3 olarak kalmıştır. Bu nedenle eleman sayısı baştan belli ve sabit olacaksa dizi, elemanların zaman içinde eklenip silinmesi gerekiyorsa List<T> daha doğrudan bir seçim olabilir.
Diziyle öğrenci notları nasıl tutulur?
Öğrenci notlarını bir dizide tutmak için int[] türünde bir değişken oluşturabilirsin. Aşağıdaki örnekte dört not saklanıyor, ikinci nota indeksle erişiliyor ve toplam not sayısı Length ile yazdırılıyor.
using System;
class Program
{
static void Main()
{
int[] notlar = { 72, 85, 90, 68 };
notlar[1] = 88;
Console.WriteLine($"İkinci not: {notlar[1]}");
Console.WriteLine($"Not sayısı: {notlar.Length}");
}
}
Beklenen çıktı:
İkinci not: 88
Not sayısı: 4
notlar[1] ifadesi dizinin ikinci elemanını gösterir çünkü C# dizilerinde indeksleme sıfırdan başlar. Örnekte ikinci notun değeri 85'ten 88'e güncellenmiştir, fakat dizinin uzunluğu değişmemiştir. Yani sabit uzunluk, not değerlerini düzenlemeye engel değildir; yalnızca dizideki eleman sayısının değiştirilmesini sınırlar.
List<int> ile notlar nasıl eklenir ve silinir?

Öğrenci notlarının sayısı değişebilecekse List<int> kullanılabilir. Boş bir liste oluşturup Add ile notları sırayla eklersin. Remove ise konuma göre değil, verdiğin değerin listedeki ilk eşleşmesine göre silme yapar. Count mevcut not sayısını verir; köşeli ayraçla belirli bir konumdaki nota erişirsin. Bu işlemler Microsoft’un List<T> başvurusunda da açıklanır.
Aşağıdaki kod, önceki dizi örneğinden bağımsız olarak çalışır:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> notlar = new List<int>();
notlar.Add(70);
notlar.Add(85);
notlar.Add(90);
Console.WriteLine($"Ekleme sonrası: {notlar.Count} not");
bool silindi = notlar.Remove(85);
Console.WriteLine($"85 silindi mi? {silindi}");
Console.WriteLine($"Silme sonrası: {notlar.Count} not");
Console.WriteLine($"İkinci not: {notlar[1]}");
}
}
Beklenen çıktı:
Ekleme sonrası: 3 not
85 silindi mi? True
Silme sonrası: 2 not
İkinci not: 90
Üç Add çağrısı 70, 85 ve 90 değerlerini eklediği için ilk Count sonucu 3’tür. Remove(85) örnekteki 85 değerini siler ve işlem başarılı olduğu için True döner. Geriye iki not kalır; indeksler sıfırdan başladığından notlar[1] artık 90 değerini gösterir. Aynı değer birden fazla kez bulunsaydı Remove yalnız ilk eşleşmeyi silerdi.
Dizi mi List<T> mi? Dört ölçütlü seçim kontrol listesi
“Eleman sayısı değişecekse List<T>, sabit kalacaksa dizi değerlendirilebilir.” Bu iyi bir başlangıç kuralıdır: Dizinin uzunluğu oluşturulduktan sonra değişmez, ancak mevcut konumlardaki notlar güncellenebilir.
- Not sayısı: Kayıtlara yeni notlar eklenecek veya notlar silinecekse listeyi değerlendir. Tutulacak not sayısı baştan belliyse dizi de uygun olabilir.
- Performans beklentisi: Birini ölçmeden daha hızlı ilan etme. Notların ne sıklıkla eklendiğine, silindiğine veya konumuyla okunduğuna bak; performans önemliyse kendi kullanım senaryonu ölç.
- API uyumu: Notları aktaracağın metodun hangi türü beklediğini kontrol et. Dizi bekleyen bir metotla çalışırken liste seçmenin doğuracağı dönüşüm ihtiyacını, liste bekleyen bir metotta da dizi kullanmanın etkisini hesaba kat.
- Okunabilirlik: Not ekleme ve silme kodun temel işiyse
AddileRemovebu niyeti açık gösterir. Sabit sayıdaki notu konumlarına göre işleyeceksen dizi daha anlaşılır gelebilir.
C# temellerini gözden geçirirken C# bilgi testini kullanabilirsin. Veri yapısı seçimini ise test sonucuna değil, notları nasıl kullanacağına dayandır.
İyi seçim, not sayısının nasıl değiştiğini ve kodun ne yapması gerektiğini açıkça karşılayan seçimdir.