C# 3.0'ın getirdiği güzel özelliklerden birisi olan İsimsiz Tipler'in bazı kısıtlamaları bulunmakta. Özellikle de metodlara parametre olarak geçirilme konusunda sıkıntı yaratıyor. Örneğin
static
void Main(string[] args)
{
var v = new
{
Ad = "oğuz",
No = 44,
Miktar = 122.2
};
BirDost(v);
}
şeklindeki bir tipi metoda parametre olarak geçirmek isteyelim.Amacımız bu tipin özelliklerindeki - property - değerleri almak ve işlem yapmak olsun.
public
static void BirDost(var belirsizTip)
{
...
}
hmmm..işler düşündüğümüz gibi gitmeyecek ve derleyici şöyle bir hata verecek.
Error 1 The contextual keyword 'var' may only appear within a local variable declaration
Tamam o zaman herşey object'tir mantığından yola çıkarak metodumuzu aşağıdaki gibi değiştirelim.
public static void BirDost(object belirsizTip)
{
// belirsizTip. (???)
}
Tamam oldu gibi..Ama belirsizTip nesnesi üzerinden Ad,No,Miktar gibi özelliklere nasıl erişebilir ki? Seni seviyorum .NET diyerek biraz reflection uyguluyoruz ve sonuç.
public
static void BirDost(object belirsizTip)
{
Type t = belirsizTip.GetType();
PropertyInfo[] ps = t.GetProperties();
foreach (PropertyInfo p in ps)
{
Console.WriteLine(p.Name + " => " + p.GetValue(belirsizTip,null));
}
}
Artık isimsiz tiplerimizi gönül rahatlığı ile - çok mu duygusal oldu nedir? - metodlara parametre olarak aktarbiliriz ;)