Próbuję uzyskać dostęp do różnych części zagnieżdżonej struktury klas, używając dowolnego ciągu znaków .Właściwość odnośnika na wykresie obiektu za pomocą ciągu znaków
Przy następujących klas (wymyślonych):
public class Person
{
public Address PersonsAddress { get; set; }
}
public class Adddress
{
public PhoneNumber HousePhone { get; set; }
}
public class PhoneNumber
{
public string Number { get; set; }
}
które chciałbym, aby móc uzyskać obiektu w "PersonsAddress.HousePhone.Number"
z instancji obiektu Person
.
Obecnie robię kilka funky rekursywne wyszukiwanie za pomocą refleksji, ale mam nadzieję, że niektórzy ninja tam mają jakieś lepsze pomysły.
Dla porównania, tutaj jest metoda (bzdura) Mam rozwinięte:
private static object ObjectFromString(object basePoint, IEnumerable<string> pathToSearch)
{
var numberOfPaths = pathToSearch.Count();
if (numberOfPaths == 0)
return null;
var type = basePoint.GetType();
var properties = type.GetProperties();
var currentPath = pathToSearch.First();
var propertyInfo = properties.FirstOrDefault(prop => prop.Name == currentPath);
if (propertyInfo == null)
return null;
var property = propertyInfo.GetValue(basePoint, null);
if (numberOfPaths == 1)
return property;
return ObjectFromString(property, pathToSearch.Skip(1));
}
Dlaczego uważasz, że musisz to zrobić? –
@Steve - Ponieważ potrzebuję kontrolować rzutowanie dowolnych typów, a konfiguracja jest najlepszym miejscem do tego. – Khanzor
Jest to również przydatne do implementacji ogólnego mechanizmu powiązania danych - właściwość DataMember BindingSource akceptuje taki ciąg ścieżki nawigacji. – ducu