Når man arbejder med anonyme klasser, kommer man fra tid til anden, ud for at skulle udlæse properties fra et anonymt objekt. Hvad gør man så, når man ikke har en type at caste til?
Ja, principielt er der kun een ting at gøre: Reflection. Det er jo en anelse besværligt, og jeg har derfor lavet en lille extension på object. Den tilføjer metoden: Get, på alle objekter. Metoden tage et property-navn som input og returnerer et typen T eller default(T) hvis propertien ikke findes.
public static class ObjectExtension
{
public static T Get<T>(this object container, string propertyName) where T: class
{
PropertyDescriptor descriptor = TypeDescriptor.GetProperties(container).Find(propertyName, true);
if (descriptor == null)
{
return default(T);
}
return descriptor.GetValue(container) as T;
}
}
Nu er det muligt at tilgå egenskaberne fra de anonyme objekter via en simpel metode:
var obj = new {
Name = "Jesper",
Answer = 43
};
obj.Get<string>("Name")
Code on…