Özgür Adem Işıklı Özgür Adem Işıklı Software Developer Resume Contact

Software Developer

Not #7 - C# Liste Dönüştürme

Bu bir kendime not yazısıdır. Daha sonradan unutma ihtimalime karşın kendimce notlar alıyorum.

Giriş

Çok basit olan bu işlemi bir çok farklı yöntemle gerçekleştirebilirsiniz. Ben bu yazıda gördüğümde çok beğendiğim yöntemi; ConvertAll metodunu örneklendireceğim.

Uygulama

Aşağıdaki yapıda bir listemiz olduğunu varsayalım;


public static void Main()
{
    List<Dictionary<string, dynamic>> items = new List<Dictionary<string, dynamic>>() 
    {
        new Dictionary<string, dynamic>() 
        {
            { "id", 1},
            { "name", "Foo Bar" }
        }
    };
}

Bu listeyi; aşağıdaki sınıfa göre dönüştürmek istiyoruz.


public class User
{
    public int id { get; set; }
    public string name { get; set; }
}

Bunun için aşağıdaki formu kullanabiliriniz;


public static void Main()
{
    List<Dictionary<string, dynamic>> items = new List<Dictionary<string, dynamic>>() 
    {
        new Dictionary<string, dynamic>() 
        {
            { "id", 1},
            { "name", "Foo Bar" }
        }
    };

    List< User > users = items.ConvertAll(
        new Converter<Dictionary<string, dynamic>, User>(MyConverter)
    );
}

public static User MyConverter (Dictionary<string, dynamic> input)
{
    return new User()
    {
        id = input["id"],
        name = input["name"]
    };
}

Burada; List tipinde olan items değişkeninin ConvertAll metodunu, yeni bir Converter göndererek çağırıyoruz. Bu Converter‘ın giriş değerininin Dictionary<string, dynamic>, dönüş değerinin ise User sınıfının bir örneği olmasını belirtiyoruz. Son olarak da bu şartları sağlayan dönüştürücü metodumuzun hangisi olduğunu belirtiyoruz. Bizim örneğimizde bu metot MyConverter isimli metot. ConvertAll metodu sırayla tüm elemanlar için gönderdiğimiz metodu çağırarak oluşan yeni liste değişkenini bize geriye gönderiyor.

What About Comments?

I do not use any comment system such as Disqus because of user's privacy. If you want to discuss something about this post, you may open an issue on the repo.

You may check what is the problem with Disqus;