Koleksiyon Referansı
C# dilinde Koleksiyon Referansı, verileri yönetmek, depolamak ve işlemek için kullanılan temel veri yapıları ve sınıflar bütünüdür. Geliştiriciler için kritik öneme sahiptir çünkü koleksiyonlar, algoritmaların etkin uygulanmasını sağlar, uygulamaların performansını optimize eder ve kodun sürdürülebilirliğini artırır. C# koleksiyonları arasında List
Koleksiyonları etkin kullanabilmek için generics, interface’ler (IEnumerable, ICollection, IList), LINQ ve nesne yönelimli programlama ilkelerini iyi anlamak gerekir. Bu, doğru koleksiyon tipini seçme, hataları önleme ve performansı artırma açısından kritiktir. Koleksiyonlar, hafıza yönetimi, istisna kontrolü ve uygulama güvenliği gibi konularda da temel rol oynar.
Bu rehber, okuyucuya koleksiyonları doğru şekilde kullanmayı, algoritmaları etkin bir şekilde uygulamayı ve C# projelerinde pratik çözümler geliştirmeyi öğretmeyi amaçlar. Koleksiyonlar, modern yazılım geliştirme süreçlerinde veri yönetiminin merkezindedir ve sistem mimarisinde kritik bir rol oynar.
Temel Örnek
textusing System;
using System.Collections.Generic;
namespace KoleksiyonReferansi
{
class Program
{
static void Main(string\[] args)
{
// Basit bir string List<T> oluşturma
List<string> meyveler = new List<string> { "Elma", "Muz", "Kiraz" };
// Eleman ekleme
meyveler.Add("Portakal");
// Eleman değiştirme
meyveler[1] = "Mango";
// Listeyi döngü ile yazdırma
Console.WriteLine("Meyve Listesi:");
foreach (string meyve in meyveler)
{
Console.WriteLine(meyve);
}
// Eleman var mı kontrol etme
if (meyveler.Contains("Kiraz"))
{
Console.WriteLine("Kiraz listede mevcut.");
}
}
}
}
Bu örnek, List
Pratik Örnek
textusing System;
using System.Collections.Generic;
namespace KoleksiyonReferansi
{
class Kisi
{
public string Isim { get; set; }
public int Yas { get; set; }
}
class Program
{
static void Main(string[] args)
{
// Dictionary ile benzersiz anahtar kullanımı
Dictionary<int, Kisi> kisiler = new Dictionary<int, Kisi>();
kisiler.Add(1, new Kisi { Isim = "Ayse", Yas = 30 });
kisiler.Add(2, new Kisi { Isim = "Ahmet", Yas = 25 });
kisiler.Add(3, new Kisi { Isim = "Mehmet", Yas = 35 });
// TryGetValue ile güvenli erişim
if (kisiler.TryGetValue(2, out Kisi bulunan))
{
Console.WriteLine($"Bulunan kişi: {bulunan.Isim}, {bulunan.Yas} yaşında");
}
// Dictionary üzerinden döngü ile erişim
foreach (var entry in kisiler)
{
Console.WriteLine($"ID: {entry.Key}, İsim: {entry.Value.Isim}");
}
// Eleman silme
kisiler.Remove(3);
}
}
}
Advanced C# Implementation
textusing System;
using System.Collections.Generic;
using System.Linq;
namespace KoleksiyonReferansi
{
class Urun
{
public string Ad { get; set; }
public decimal Fiyat { get; set; }
}
class Program
{
static void Main(string[] args)
{
try
{
// HashSet ile benzersiz eleman yönetimi
HashSet<Urun> urunler = new HashSet<Urun>(new UrunKarsilastirici())
{
new Urun { Ad = "Laptop", Fiyat = 1200 },
new Urun { Ad = "Tablet", Fiyat = 450 },
new Urun { Ad = "Laptop", Fiyat = 1200 } // duplicate ignored
};
// LINQ ile filtreleme ve sıralama
var pahaliUrunler = urunler
.Where(u => u.Fiyat > 500)
.OrderByDescending(u => u.Fiyat)
.ToList();
foreach (var u in pahaliUrunler)
{
Console.WriteLine($"Ürün: {u.Ad}, Fiyat: {u.Fiyat}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Hata: {ex.Message}");
}
}
}
class UrunKarsilastirici : IEqualityComparer<Urun>
{
public bool Equals(Urun x, Urun y)
{
return x.Ad == y.Ad && x.Fiyat == y.Fiyat;
}
public int GetHashCode(Urun obj)
{
return obj.Ad.GetHashCode() ^ obj.Fiyat.GetHashCode();
}
}
}
Gelişmiş örnekler, Dictionary\
C# koleksiyonları için en iyi uygulamalar; generics kullanımı, doğru veri yapısını seçme, foreach ile güvenli döngü, gereksiz döngüleri minimize etme ve istisna yönetimidir. Bellek sızıntısını önlemek için gereksiz referanslar kaldırılmalı ve büyük koleksiyonlarda performans izlenmelidir. Çoklu iş parçacığı ortamında Concurrent koleksiyonlar güvenli kullanım sağlar. LINQ ile verileri optimize etmek ve özel karşılaştırıcılar kullanmak performansı artırır. Güvenlik açısından, verilerin doğrulanması ve paylaşılan koleksiyonların güvenliği sağlanmalıdır.
📊 Kapsamlı Referans
C# Element/Method | Description | Syntax | Example | Notes |
---|---|---|---|---|
List<T> | Dinamik sıralı liste | List<int> sayilar = new List<int>(); | sayilar.Add(10); | İndeks ile erişim, otomatik boyut ayarlama |
List<T>.Add() | Eleman ekleme | sayilar.Add(10); | sayilar.Add(5); | Ortalama O(1) |
List<T>.Remove() | Eleman silme | sayilar.Remove(10); | sayilar.Remove(5); | Başarılı ise true döner |
List<T>.Contains() | Eleman var mı kontrol | sayilar.Contains(10); | bool varMi = sayilar.Contains(5); | Doğrusal arama |
List<T>.Count | Eleman sayısı | sayilar.Count | int toplam = sayilar.Count; | Otomatik güncellenir |
Dictionary\<TKey,TValue> | Anahtar-değer çiftleri | Dictionary\<int,string> dict = new Dictionary\<int,string>(); | dict.Add(1,"Ayşe"); | Anahtarla hızlı erişim |
Dictionary\<TKey,TValue>.Add() | Anahtar-değer ekleme | dict.Add(1,"Ayşe"); | dict.Add(2,"Ahmet"); | Anahtar var ise hata |
Dictionary\<TKey,TValue>.TryGetValue() | Güvenli erişim | dict.TryGetValue(2,out string val); | bool bulundu = dict.TryGetValue(1,out string isim); | Hata önleyici |
Dictionary\<TKey,TValue>.Remove() | Anahtar-değer silme | dict.Remove(1); | dict.Remove(2); | Başarılı ise true döner |
Dictionary\<TKey,TValue>.Keys | Anahtar koleksiyonu | var keys = dict.Keys; | foreach(var key in dict.Keys) | Sadece okunur |
Dictionary\<TKey,TValue>.Values | Değer koleksiyonu | var values = dict.Values; | foreach(var val in dict.Values) | Sadece okunur |
Queue<T> | FIFO kuyruk | Queue<int> q = new Queue<int>(); | q.Enqueue(10); | İlk giren, ilk çıkar |
Queue<T>.Enqueue() | Eleman ekleme | q.Enqueue(10); | q.Enqueue(20) | O(1) |
Queue<T>.Dequeue() | İlk elemanı çıkarma | q.Dequeue(); | int ilk = q.Dequeue(); | Boşsa hata |
Queue<T>.Peek() | İlk elemanı görme | q.Peek(); | int peek = q.Peek(); | Boşsa hata |
Stack<T> | LIFO yığın | Stack<int> s = new Stack<int>(); | s.Push(10); | Son giren, ilk çıkar |
Stack<T>.Push() | Eleman ekleme | s.Push(10); | s.Push(20) | O(1) |
Stack<T>.Pop() | Üst elemanı çıkarma | s.Pop(); | int ust = s.Pop(); | O(1), boşsa hata |
Stack<T>.Peek() | Üst elemanı görme | s.Peek(); | int ust = s.Peek(); | Boşsa hata |
HashSet<T> | Benzersiz eleman | HashSet<int> hs = new HashSet<int>(); | hs.Add(10); | Duplicate önler |
HashSet<T>.Add() | Benzersiz ekleme | hs.Add(10); | hs.Add(5); | True ise eklendi |
HashSet<T>.Remove() | Eleman silme | hs.Remove(10); | hs.Remove(5); | True ise silindi |
ObservableCollection<T> | Gözlemlenebilir koleksiyon | ObservableCollection<string> oc = new ObservableCollection<string>(); | oc.Add("Item"); | UI değişikliklerini bildirir |
ConcurrentDictionary\<TKey,TValue> | Eşzamanlı sözlük | ConcurrentDictionary\<int,string> cd = new ConcurrentDictionary\<int,string>(); | cd | |
ConcurrentQueue<T> | Eşzamanlı kuyruk | ConcurrentQueue<int> cq = new ConcurrentQueue<int>(); | cq.TryDequeue(out int val); | Çoklu iş parçacığı güvenli |
ConcurrentStack<T> | Eşzamanlı yığın | ConcurrentStack<int> cs = new ConcurrentStack<int>(); | cs.TryPop(out int val); | Çoklu iş parçacığı güvenli |
📊 Complete C# Properties Reference
Property | Values | Default | Description | C# Support |
---|---|---|---|---|
Count | int | 0 | Eleman sayısı | Tüm koleksiyonlar |
Capacity | int | Değişken | Büyümeden önce kapasite | List<T>, ArrayList |
IsReadOnly | bool | false | Salt okunur | ICollection<T>, IList<T> |
Keys | TKey Koleksiyonu | N/A | Anahtar koleksiyonu | Dictionary\<TKey,TValue> |
Values | TValue Koleksiyonu | N/A | Değer koleksiyonu | Dictionary\<TKey,TValue> |
Comparer | IEqualityComparer | Varsayılan | Eleman karşılaştırıcı | HashSet<T>, Dictionary\<TKey,TValue> |
SyncRoot | object | null | Senkronizasyon nesnesi | ICollection |
IsSynchronized | bool | false | Çoklu iş parçacığı güvenliği | ICollection |
CollectionChanged | Event | N/A | Koleksiyon değişim olayı | ObservableCollection<T> |
CapacityChanged | Event | N/A | Kapasite değişim olayı | List<T> |
Comparer | IComparer | Varsayılan | SortedList/SortedDictionary karşılaştırıcı | SortedList\<TKey,TValue>, SortedDictionary\<TKey,TValue> |
C# Koleksiyon Referansı, geliştiricilere veri yönetiminde güçlü ve esnek araçlar sunar. List
🧠 Bilginizi Test Edin
Test Your Knowledge
Test your understanding of this topic with practical questions.
📝 Talimatlar
- Her soruyu dikkatle okuyun
- Her soru için en iyi cevabı seçin
- Quiz'i istediğiniz kadar tekrar alabilirsiniz
- İlerlemeniz üstte gösterilecek