Sto cercando di accedere a varie parti di una struttura di classe nidificata utilizzando un arbitrario stringa .proprietà Ricerca in oggetto grafico tramite una stringa
Dati i seguenti (artificiosa) classi:
public class Person
{
public Address PersonsAddress { get; set; }
}
public class Adddress
{
public PhoneNumber HousePhone { get; set; }
}
public class PhoneNumber
{
public string Number { get; set; }
}
mi piacerebbe essere in grado di ottenere l'oggetto "PersonsAddress.HousePhone.Number"
da un'istanza dell'oggetto Person
.
Attualmente sto facendo un po 'di ricerca ricorsiva funky utilizzando la riflessione, ma spero che alcuni ninja là fuori hanno alcune idee migliori.
Per avere un riferimento, qui è il metodo (scadente) ho sviluppato:
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));
}
Perché pensi di aver bisogno di fare questo? –
@Steve - Perché ho bisogno di controllare la proiezione di tipi arbitrari e la configurazione è il posto migliore per questo. – Khanzor
Ciò è utile anche per l'implementazione di un meccanismo di associazione dati generico: la proprietà DataMember di BindingSource accetta una stringa del percorso di navigazione del genere. – ducu