20. juli 2014 - 08:53Der er
8 kommentarer og 1 løsning
Reflection - hent værdier fra nested class/properties
Hejsa
Jeg prøver at finde frem til en metode hvorpå jeg kan laven en list.orderby(x => x.parameter)
orderby skal kunne angives som en string, det virker fint med denne metode
PropertyInfo pi = typeof(person).GetProperty(propertyName); personSorted = persons.OrderBy(x => pi.GetValue(x,null)).ToList();
men det virker KUN på properties som er på første level i en class, det jeg så mangler er at kunne få adgang til properties fra den nested classes som f.eks, nedenstående class hvor person indeholder klassen adresseInfo - så hvordan får jeg fat i de properties, så de kan bruges i min orderby - det skal være reflection da jeg skal kunne angive orderby som udfra en string variabel i databasen.
public class person { public person() { addressInfo = new address(); }
public string firstname { get; set; } public string lastname { get; set; }
public address addressInfo; }
public class address { public string city { get; set; } public int postalcode { get; set; } }
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
namespace E { public class Person { public string FirstName { get; set; } public string LastName { get; set; } public Address Address { get; set; } }
public class Address { public string City { get; set; } public int ZipCode { get; set; } } public class Program { public static void Main(string[] args) { Person o = new Person { FirstName = "Oscar", LastName = "Mayer", Address = new Address { City = "Somewhere", ZipCode = 1234 } }; PropertyInfo pi1 = typeof(Person).GetProperty("Address"); PropertyInfo pi2 = typeof(Address).GetProperty("City"); String city = (string)pi2.GetValue(pi1.GetValue(o, null), null); Console.WriteLine(city); Console.ReadKey(); } } }
Tak for eksempel - det virker fint, men løser ikke helt mit problem - jeg har en list af type Person
Denne vil jeg så sortere ved hjælp orderby funktionen på list - Person.OrderBy(x => pi1.GetValue(x, null)).ToList()
men problemet er at jeg ikke kan angive pi2 da den stammer fra en anden type, så hvordan kan jeg angive i orderby at den skal via pi1 hvis man kan sige det sådan i teorien hedder den jo 'Person.Address' det går fint med properties tilhørende direkte på person klassen
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.