Etiket Arşivi c# dictionary

IF Enflasyonundan Kurtulmak İçin Dictionary Kullanımı

Merhabalar.

Daha önce temel manada Dictionary kullanımından bahsetmiştim.

Dictionary yapıları anahtar-değer(key-value) ikilisiyle içinde değer tutan generic yapılar. Burada farklı bir kullanımından bahsetmek istiyorum.

Dictionary kullanırken value olarak method atayabiliyoruz.

Atamak istediğimiz bu metod geriye değer dönen bir metod olacaksa Func<parametre1,parametre2.., return_tipi> ifadesiyle;
değer dönmeyecek bir metod olacaksa Action<parametre1,parametre2….> ifadesiyle set ediyoruz.

Bilhassa IF enflasyonu olan yerlerde bu şekilde gayet temiz bir iş yapabiliyoruz.

Şimdi bir banka için, mesela combobox’tan seçilip gönderilen değerlere göre, çeşitli raporlar hazırlayan aşağıdaki gibi bir metodumuz olsun:

private void RaporHazirla(int raporTuru)
{
	if (raporTuru == 1)
	{
		SubeBazliGunlukIslemRaporu();
	}
	else if (raporTuru == 2)
	{
		PersonelBazliGunlukIslemRaporu();
	}
	else if (raporTuru == 3)
	{
		MusteriBazliGunlukIslemRaporu();
	}
	else if (raporTuru == 4)
	{
		ToplamGunlukIslemRaporu();
	}
	else if (raporTuru == 5)
	{
		MessageBox.Show("Bu rapor 01.01.2015 tarihinden itibaren verilememektedir.");
	}
}

Burada bir Dictionary oluşturup, key olarak raporTuru‘nu, value olarak da rapor oluşturan metodları ekleyebilirim.

Ama burada bir problemimiz var! Son casede bir metod çağırılmıyor. Ama buradan da bir metod çağırmamız gerekiyor.

Yani:

private void RaporYokUyari()
{
    MessageBox.Show("Bu rapor 01.01.2015 tarihinden itibaren verilememektedir.");
}
private void RaporHazirla(int raporTuru)
{
	if (raporTuru == 1)
	{
		SubeBazliGunlukIslemRaporu();
	}
	else if (raporTuru == 2)
	{
		PersonelBazliGunlukIslemRaporu();
	}
	else if (raporTuru == 3)
	{
		MusteriBazliGunlukIslemRaporu();
	}
	else if (raporTuru == 4)
	{
		ToplamGunlukIslemRaporu();
	}
	else if (raporTuru == 5)
	{
		RaporYokUyari();
	}
}

gibi.

Artık Dictionary’mi oluşturabilirim. Global değişken olarak oluşturuyorum:

Dictionary<long?, Action> _dictRaporlar = new Dictionary<long?, Action>();

Burada value’yu Action tipinde tanımlamam demek, ekleyeceğim metodların tamamının void olması demek.
Eğer örneğin 2 int parametre alıp string bir sonuç dönen metodlar kullanacaksam(tabi bu defa da metodların tamamının parametre tipleri ve dönüş tipi aynı olmak zorunda. Ama object kullanılarak biraz esnetilebilir.) Action yerine Func<int,int,string> yazmam gerekirdi.

Her neyse şimdi Dictionary’nin içeriğini oluşturalım:

private void raporDictionaryOlustur()
{
	_dictRaporlar[1] = new Action(SubeBazliGunlukIslemRaporu);
	_dictRaporlar[2] = new Action(PersonelBazliGunlukIslemRaporu);
	_dictRaporlar[3] = new Action(MusteriBazliGunlukIslemRaporu);
	_dictRaporlar[4] = new Action(ToplamGunlukIslemRaporu);
	_dictRaporlar[5] = new Action(RaporYokUyari);
} 

Son tahlilde RaporHazirla metodumu aşağıdaki gibi ziyadesiyle sade bir şekilde düzenliyorum:

private void RaporHazirla(int raporTuru)
{
	 _dictRaporlar[raporTuru].Invoke();
}

Kendinize çook iyi davranın.

 Bu sayfa 964 kez görüntülendi

It's only fair to share...Share on LinkedInShare on FacebookShare on Google+Tweet about this on TwitterShare on Tumblr

C#’ta Dictionary Kullanımı

Merhabalar.

Bu yazıda temel manada C#’ta dictionary kullanımından bahsetmeye çalışacağım.

Fırsat bulursam ileride daha detaylı ele almayı düşünüyorum.

Nedir?

Adından anlaşılacağı üzere sözlüğe benzetilen, key-value ikilisini içeren “generic” bir yapı.

Tanımı şu şekilde yapılır:


Dictionary<TKey, TValue> d = new Dictionary<TKey, TValue>();

Buradaki hem key hem de value kısmı herhangi bir obje(primitive tipler, nesne, delege/metod vb.) alabilir.

Aşağıda basit bir örnek var:


using System;

using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Dictionary<int, string> d = new Dictionary<int, string>(){
            {1,"Ahmet"},
            {2, "Mehmet"},
            {3,"Muhammed"}};

        Console.WriteLine(d[1]);
    }
}

Çıktı: Ahmet

Üstte söylediğim gibi key ve value kısımlarına farklı objeler set edilebilir.

Örneğin oluşturduğumuz bir “Musteri” sınıfının nesnesini set edelim:


using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
         Musteri must1 = new Musteri(1, "Muhammed", "Hilmi");
         Musteri must2 = new Musteri(7, "Ahmet", "Koca");
         Musteri must3 = new Musteri(12, "Mehmet", "Kara");
         Musteri must4 = new Musteri(15, "Mustafa", "Kılıç");

         Dictionary<int, Musteri> musteri = new Dictionary<int, Musteri>();

         musteri.Add(must1.Id, must1);
         musteri.Add(must2.Id, must2);
         musteri.Add(must3.Id, must3);
         musteri.Add(must4.Id, must4);

         Console.WriteLine("Id : " + 1 + ", Ad : " + musteri[1].Ad + ", Soyad : " + musteri[1].Soyad);
}

public class Musteri
{
    public Musteri(int id,string ad,string soyad)
    {
        Id = id;
        Ad = ad;
        Soyad = soyad;
    }
    public int Id { get; set; }
    public string Ad { get; set; }
    public string Soyad { get; set; }
}

Çıktı: Id : 1,Ad : Muhammed, Soyad : Hilmi

 

 Bu sayfa 2422 kez görüntülendi

It's only fair to share...Share on LinkedInShare on FacebookShare on Google+Tweet about this on TwitterShare on Tumblr